Closed Bug 1954323 Opened 7 months ago Closed 7 months ago

Very high CPU usage on TikTok from toLocaleDateString

Categories

(Core :: JavaScript: Internationalization API, defect)

Firefox 136
defect

Tracking

()

VERIFIED FIXED
138 Branch
Tracking Status
firefox-esr115 --- wontfix
firefox-esr128 137+ fixed
firefox136 + fixed
firefox137 + fixed
firefox138 + fixed

People

(Reporter: georgiadis, Assigned: anba)

References

()

Details

(Keywords: webcompat:needs-contact, webcompat:site-report, Whiteboard: [webcompat:sightline])

Attachments

(5 files)

User Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36

Steps to reproduce:

  1. Open TikTok in Firefox (versions 136, or 137 beta).
  2. Scroll through the feed and play videos.
  3. Try opening a profile page or engaging with content.
  4. Experience extreme slowdowns, UI lag, and video stuttering.

Actual results:

  • Videos start stuttering badly after scrolling through a few.
  • Scrolling becomes painfully slow and unresponsive.
  • Profile pages take forever to load.
  • The browser feels completely overwhelmed by TikTok’s site, despite normal behavior on Chromium.

Expected results:

TikTok should run smoothly without crippling lag, delayed inputs, or performance issues.

The Bugbug bot thinks this bug should belong to the 'Core::Audio/Video: Playback' component, and is moving the bug to that component. Please correct in case you think the bot is wrong.

Component: Untriaged → Audio/Video: Playback
Product: Firefox → Core

The Bugbug bot thinks this bug should belong to the 'Core::Audio/Video: Playback' component, and is moving the bug to that component. Please correct in case you think the bot is wrong.

It is confirmed by dozens of comments on Reddit:

https://www.reddit.com/r/firefox/comments/1j7as48/tiktoks_site_is_insanely_slow_demanding_on/

Thanks for reporting! To help diagnose this issue better, please can you:

  1. Type "about:support" in Firefox and copy-paste its contents here
  2. Does this reproduce in a clean profile or Troubleshoot Mode?
  3. Capture a log when the issue occurs:
  • In Firefox, ideally freshly started with no other tabs, go to about:logging in a new tab
  • Select the Mediapreset
  • Enable "stack traces for log messages"
  • Click on "Set Log Modules"
  • Click Start Logging
  • Reproduce the bug
  • Back on about:logging, click Stop Logging
  • In the new tab that appears with the Firefox Profiler web application, in the top right click the button to upload the profile
  • Make sure hidden threads are included and upload, then share the link here or send privately to a Mozilla developer
    -See https://paul.cx/public/about-logging-presentation.webm for a video walk-through
  1. If this used to work in an earlier version of Firefox, please do a bisection to find the exact change that caused this (https://mozilla.github.io/mozregression/)
Flags: needinfo?(georgiadis)

Having same issue. (Firefox 136.0.1). It's really bad.

Hi mantas! I will ask you the same questions I asked the OP:

  1. Type "about:support" in Firefox and copy-paste its contents here
  2. Does this reproduce in a clean profile or Troubleshoot Mode?
  3. Capture a log when the issue occurs:
  • In Firefox, ideally freshly started with no other tabs, go to about:logging in a new tab
  • Select the Media preset
  • Enable "stack traces for log messages"
  • Click on "Set Log Modules"
  • Click Start Logging
  • Reproduce the bug
  • Back on about:logging, click Stop Logging
  • In the new tab that appears with the Firefox Profiler web application, in the top right click the button to upload the profile
  • Make sure hidden threads are included and upload, then share the link here or send privately to a Mozilla developer
    -See https://paul.cx/public/about-logging-presentation.webm for a video walk-through
  1. If this used to work in an earlier version of Firefox, please do a bisection to find the exact change that caused this (https://mozilla.github.io/mozregression/)
Flags: needinfo?(defixass)

Same for me,It's incredibily slow on firefox v136 ,It took like 5 to 8 seconds for loading just 1 tiktok reel. please fix this.

Attached file about:support info —

did not want to send that comment. not sure how I did it. anyway, I tried to log it but when I signed out of tiktok the sluggishness was gone. now it's gone logged in or not.

Could anyone try to disable the pref media.hardware-video-decoding.enabled and then restart Firefox to see if it helps? Thanks.

(In reply to Alastor Wu [:alwu] from comment #10)

Could anyone try to disable the pref media.hardware-video-decoding.enabled and then restart Firefox to see if it helps? Thanks.

It did nothing. Sorry guys I didn't have enough time to fill out a proper bug report as you asked, was busy. Troubleshoot mode doesn't help but clean profile did. On clean profile it works perfectly.

I'm unsure however what causes it. I have reset all cookies and site data (apart from browser history), tried without extensions, reverted other privacy options and it doesn't help. The site literally loads slower (i see loader skeletons on left sidebar) while on new profile i never see them. You can also see the lag as you hover fast on the buttons. On new profile everything is running smoothly.

Any ideas?

Flags: needinfo?(defixass)

We need a profile, please follow this instruction, thanks!

Attached file about:support info —
Here you go my main profile: https://share.firefox.dev/3FOklFX This is from the new profile that works perfectly: https://share.firefox.dev/4iEFv7T
Summary: 🔥 URGENT: TikTok Nearly Unusable on Firefox 136+ → TikTok Nearly Unusable on Firefox 136+

From those profiles, I didn't see any dropped video frames, and video also played correctly. It doesn't seem a media issue, move this bug to another component.

Component: Audio/Video: Playback → Performance
Attached file TikTok super slow —
Attachment #9473586 - Flags: review+
Attachment #9473586 - Flags: data-review+
Attachment #9473586 - Flags: review+
Attachment #9473586 - Flags: data-review+

In the profile in the comment15, there are some many GC and janking, maybe there are something wrong in their js code. Jeff, do you know who could be the best person to check this issue? Thanks!

Flags: needinfo?(jmuizelaar)
Severity: -- → S2

Can anyone who's experiencing this post an about:memory report?

Flags: needinfo?(jmuizelaar)

From the "slow" profile, it looks like a huge amount of time is being spent in toLocaleDateString.

anba or Tom, do you have any idea what might be going wrong here? I guess a user could have something configured in their profile that would cause toLocaleDateString to be very slow? That would at least explain why a clean profile doesn't reproduce the issue.

Flags: needinfo?(tschuster)
Flags: needinfo?(andrebargull)

Or maybe you have some ideas, Dan? I see that you did some Date-related work that landed in 136 (bug 1944621) and 137 (bug 1946525). I don't see how that could cause this kind of JIT CPU usage but maybe you are at least familiar with the code in question. Thanks.

Flags: needinfo?(dminor)

Given the profile, I'm going to move this over to the internationalization component.

Component: Performance: General → JavaScript: Internationalization API

The profile in comment 15 also has what I'd call internationalization related code, but it is more like stuff under intl/icu/source, so it looks different.

I can reproduce something similar on my machine, where I see 247ms spent in toLocaleDateString, then 473ms spent in a major GC. The CPU is spiking up frequently rather than being completely saturated like in the other profiles, but I do have a very powerful machine.

I tried this test case on https://jsbench.me/ : new Date((new Date).getTime()-864e5*1).toLocaleDateString("en-US")

On Firefox (Nightly) and Safari (stable), I got a max value of around 45k ops/s.
On Chrome, I got a max value of around 1.2M ops/s.

(In reply to Andrew McCreight [:mccr8] from comment #24)

I can reproduce something similar on my machine, where I see 247ms spent in toLocaleDateString, then 473ms spent in a major GC. The CPU is spiking up frequently rather than being completely saturated like in the other profiles, but I do have a very powerful machine.

I should be more specific that the performance felt okay on my machine, but the internationalization code was still very prominent in a profile.

Attached file about:memory info —
I noticed throughout the days it's getting worse while on the clean profile it's still working perfectly (although I haven't used much in it). The site now takes 8 seconds to fully load, ~6 seconds for the loading skeleton on the left sidebar to disappear on a refresh. Contrast that to the new profile which takes <1 sec. Here's a youtube link of what i'm dealing with : https://youtu.be/2UY3jrGQoiI. The new profile is in dark mode. When clearing TikTok cookies it becomes very noticeably faster, very usable BUT STILL A BIT SLOWER than the clean profile one. I still see the loading skeleton for 3 secs. But I am noticing it again slow down the more I use it and it gets slower quite fast. I have not noticed anything similar happening on any other site. On chrome the site is working perfectly (I've used it for a long time with no cookie clearings) and noticed no slowdowns. I'm adding that about:memory report that Jeff asked but this is after clearing the cookies.

Mind you, there seem to be two different issues mentioned by the reporter. One is the slow UI and the second is the video stuttering.

On my end, visiting the site for the first time (cleared cookies, no account), I am presented with two modals after some time. One to sign in/up and another to select "my interests". Scrolling through videos by (specifically) clicking on the up/down button to go to the previous/next video seems to be visually delayed/slow, but it gets much better after I deal with the aforementioned modals (continue as a guest / skip). It might be the case that if someone blocks these modals with an extension, they get a slower performance indefinitely. This is an issue that was introduced by the site, as older versions of Firefox are affected as well.

The video stuttering issue seems to be related to h265, but it only happens after you scroll a few videos. Disabling hevc in the preferences (media.hevc.enabled:false) is a workaround for this issue. Hardware acceleration doesn't have any effect at all here (I made sure to restart the browser). I'm not able to provide a profile/log currently, but profiling the video stuttering issue shows the MediaPDecoder thread to be created and destroyed every about 5-6sec, which roughly coincides with the appearance of stutters. I'm on Linux btw.

(In reply to tgn-ff from comment #28)

The video stuttering issue seems to be related to h265, but it only happens after you scroll a few videos. Disabling hevc in the preferences (media.hevc.enabled:false) is a workaround for this issue. Hardware acceleration doesn't have any effect at all here (I made sure to restart the browser). I'm not able to provide a profile/log currently, but profiling the video stuttering issue shows the MediaPDecoder thread to be created and destroyed every about 5-6sec, which roughly coincides with the appearance of stutters. I'm on Linux btw.

Can you file a separate issue for the h265 problem?

Flags: needinfo?(tgnff242)

Given our current theory for the cause of the problem, it seems like it should be reproducible in Safari and Gnome Web. Can people try those browsers to see if you see the same problem there?

The code that seems to be causing the performance problem is: const a = e => new Date((new Date).getTime() - 86400000 * e).toLocaleDateString("en-US") inside of 40407: (e, t, n) => { in webapp-desktop.29a7afaa39ea6e4ff3df.js

We should try to measure how often the a function is being called in different scenarios.

I filed Bug 1955763 about the video issue.

Flags: needinfo?(tgnff242)
See Also: → 1955763

The hotspot of the code unminified looks something like:

  const e = 14
  const t = '7411334960449127942'
  const i = 'slardar_perf_lcp_acc'
  const n = {
    "3/21/2025":
      { "7411334960449127942": { "session_last_update_time": 1742609038327, "stay_duration": 73.73, "session_cnt": 1, "os": "mac", "browser_brand": "chrome", "screen_resolution": 1930176, "screen_orientation": 1, "cpu_core_number": 16, "network_downlink": 10, "network_rtt": 100, "network_speed_effective_type": "4g", "region": "CA", "launch_mode": "direct", "landing_page": 0, "language_system": "en-ca", "language_app": "en", "timezone": -4, "time_of_day_landing": 23, "day_of_week": 5, "is_local_daytime": 0, "is_login": true, "max_touch_points": 0, "ret_acc": 1, "total_score": 8.06, "hardware_score": 8.06, "login_days_count": 1, "page_view": 3, "others_profile_page_view": 2, "hot_page_view": 1, "slardar_perf_fcp_acc": 0.77, "slardar_perf_fcp_cnt": 1, "vv": 8, "hot_vv": 8, "item_avg_freshness": 213, "item_avg_duration": 875, "item_avg_like_history": 8859600, "item_avg_vv_history": 95700000, "item_avg_share_history": 426579, "item_avg_comment_history": 58606, "item_avg_favorite_history": 525299, "item_avg_resolution": 4320, "item_portrait": 8, "item_100k_vv_vv": 8, "creator_bluev_vv": 2, "creator_1k_follower_vv": 8, "creator_10k_follower_vv": 8, "creator_100k_follower_vv": 7, "hot_item_avg_freshness": 213, "hot_item_avg_duration": 875, "hot_item_avg_like_history": 8859600, "hot_item_avg_vv_history": 95700000, "hot_item_avg_share_history": 426579, "hot_item_avg_comment_history": 58606, "hot_item_avg_favorite_history": 525299, "hot_item_avg_resolution": 4320, "hot_item_portrait": 8, "hot_item_100k_vv_vv": 8, "hot_creator_bluev_vv": 2, "hot_creator_1k_follower_vv": 8, "hot_creator_10k_follower_vv": 8, "hot_creator_100k_follower_vv": 7, "vv_finish": 2, "hot_vv_finish": 2, "play_duration": 6.3, "hot_play_duration": 6.3, "slardar_perf_lcp_acc": 3.91, "slardar_perf_lcp_cnt": 1, "hot_slardar_perf_lcp_acc": 3.91, "hot_slardar_perf_lcp_cnt": 1, "hot_to_other_profile_view": 1, "preview_vv": 24, "others_profile_preview_vv": 24, "video_pause_by_switch_tab_cnt": 6 } },
    "3/22/2025":
      { "7411334960449127942": { "session_last_update_time": 1742658246018, "stay_duration": 492.4699999999999, "session_cnt": 1, "os": "mac", "browser_brand": "chrome", "screen_resolution": 1930176, "screen_orientation": 1, "cpu_core_number": 16, "network_downlink": 10, "network_rtt": 50, "network_speed_effective_type": "4g", "region": "CA", "launch_mode": "direct", "landing_page": 0, "language_system": "en-ca", "language_app": "en", "timezone": -4, "time_of_day_landing": 11, "day_of_week": 6, "is_local_daytime": 1, "is_login": true, "max_touch_points": 0, "ret_acc": 1, "total_score": 8.06, "hardware_score": 8.06, "login_days_count": 1, "preview_vv": 6, "others_profile_preview_vv": 6, "video_pause_by_switch_tab_cnt": 4, "page_view": 2, "others_profile_page_view": 2, "slardar_perf_fcp_acc": 2.48, "slardar_perf_fcp_cnt": 2, "slardar_perf_lcp_acc": 1.62, "slardar_perf_lcp_cnt": 1, "other_profile_slardar_perf_lcp_acc": 1.62, "other_profile_slardar_perf_lcp_cnt": 1 } }
  }

  const dateNdaysAgo = e => new Date((new Date).getTime() - 864e5 * e).toLocaleDateString("en-US")

  // Create an array of the last 'e' dates using Array.from with a length property e.g. [ "3/22/2025", "3/21/2025", "3/20/2025", … ]
  const lastDates = Array.from({
    length: e
  }, ((element, index) => dateNdaysAgo(index)))

  // Count the number of days in `n` that have `t` key and pull out `i`
  const totalCount = lastDates.reduce((count, curVal) => 
    n[curVal]?.[t]?.[i] !== undefined ? count + 1 : count, 0)

GEOR, do you still see video stutter if you set media.hevc.enabled = false in about:config?

Flags: needinfo?(georgiadis)

The 14 days appears to be coming from here:

      const i = 1988,
      o = 'webapp_launch_mode',
      a = 'webapp_original_traffic_type',
      r = 'webapp_extra_data',
      s = 'webapp_session_id',
      l = 'webapp_tiktok_open',
      c = 'webapp_tiktok_privious',
      d = 'webapp_from_group_id',
      u = 'f_s_1',
      p = 14,
      v = [
        'VGeo-EU'
      ],
      g = 'guest-mode-flag',
      m = 'others',
      h = 'direct',
      _ = /h5_t|h5_m|landing_page|webapp/,
      f = /embed/

Support using a cached Intl.DateTimeFormat when locales is a string.

Assignee: nobody → andrebargull
Status: UNCONFIRMED → ASSIGNED
Ever confirmed: true

(In reply to Jeff Muizelaar [:jrmuizel] from comment #34)

GEOR, do you still see video stutter if you set media.hevc.enabled = false in about:config?

I just tested again with media.hevc.enabled set to both false and true, and at least at this particular moment, I’m not seeing any shuttering in either case. I suspect that the shuttering I originally reported might have been due to overall overload caused by the other issues, which may have indirectly affected video playback as well - unless something changed in the meantime.

Additionally, I removed Tiktok's cookies (I had 35 stored totaling 6.5 MB) and noticed a huge difference in the loading speed, as others have reported. It’s now functional, but it still doesn’t compare to the speed of other browsers. It feels like opening webpage with a massive amount of content and no pagination.

Flags: needinfo?(georgiadis)
Pushed by tcampbell@mozilla.com: https://hg.mozilla.org/integration/autoland/rev/7f7df50126ac Cache DateTimeFormat for Date.prototype.toLocaleString when locales argument is used. r=tcampbell
Flags: needinfo?(tschuster)
Flags: needinfo?(dminor)
Flags: needinfo?(andrebargull)
Pushed by amarc@mozilla.com: https://hg.mozilla.org/mozilla-central/rev/4088df7b04bd Cache DateTimeFormat for Date.prototype.toLocaleString when locales argument is used. r=tcampbell
Status: ASSIGNED → RESOLVED
Closed: 7 months ago
Resolution: --- → FIXED
Target Milestone: --- → 138 Branch
Whiteboard: [webcompat:sightline]

I did some more digging into what's going on here and in my profile every time the event() function is called new Date((new Date).getTime() - 864e5 * e).toLocaleDateString("en-US") happens a lot. In my Chrome profile I see it happening 398 times. In my Firefox profile it's happening 1908 times.

event() is used to instrument basically everything that happens on TikTok

Nightly builds are out with this fix. They have a buildid of 20250323000437 (check about:support)

I'd be interested to hear anyone's experience using the 20250323000437 build vs. previous nightlies/release

Comment on attachment 9473816 [details]
Bug 1954323: Cache DateTimeFormat for Date.prototype.toLocaleString when locales argument is used. r=#spidermonkey-reviewers!

Beta/Release Uplift Approval Request

  • User impact if declined/Reason for urgency: Very bad performance on TikTok. Some users are seeing jank on the order of multiple seconds between events. And unreponsiveness for 10s of seconds.
  • Is this code covered by automated tests?: Yes
  • Has the fix been verified in Nightly?: Yes
  • Needs manual test from QE?: No
  • If yes, steps to reproduce:
  • List of other uplifts needed: None
  • Risk to taking this patch: Low
  • Why is the change risky/not risky? (and alternatives if risky): The fix is a performance fix and shouldn't have any noticeable change in the results of the function.
  • String changes made/needed:
  • Is Android affected?: Yes
Attachment #9473816 - Flags: approval-mozilla-release?
Attachment #9473816 - Flags: approval-mozilla-beta?

Did tiktok change their code recently?

It looks like the cost of this is proportional to the number of days and the number of metrics in the f_s_1 value in local storage.

Here's mine from a profile that only has two days of information. 3/22/2025 and 3/23/2025

f_s_1:"{"3/22/2025":{"7484813122872641030":{"session_last_update_time":1742694009876,"stay_duration":2.4100000000000006,"session_cnt":1,"os":"mac","browser_brand":"firefox","screen_resolution":1930176,"screen_orientation":1,"cpu_core_number":16,"region":"CA","launch_mode":"direct","landing_page":0,"language_system":"en-us","language_app":"en","timezone":-4,"time_of_day_landing":21,"day_of_week":6,"is_local_daytime":0,"is_login":false,"max_touch_points":0,"ret_acc":1,"total_score":8.12,"hardware_score":8.12,"first_active_date":0,"is_new_user":1,"page_view":3,"explore_page_view":2,"slardar_perf_fcp_acc":4.26,"slardar_perf_fcp_cnt":1,"preview_vv":18,"explore_page_preview_vv":18,"vv":4,"explore_page_vv":1,"item_avg_freshness":123,"item_avg_duration":288,"item_avg_like_history":64401600,"item_avg_vv_history":490200000,"item_avg_share_history":1676333,"item_avg_comment_history":245594,"item_avg_favorite_history":3351000,"item_avg_resolution":2160,"item_portrait":4,"item_100k_vv_vv":4,"creator_bluev_vv":3,"creator_1k_follower_vv":4,"creator_10k_follower_vv":3,"creator_100k_follower_vv":3,"explore_item_avg_freshness":8,"explore_item_avg_duration":14,"explore_item_avg_like_history":36000000,"explore_item_avg_vv_history":275300000,"explore_item_avg_share_history":975500,"explore_item_avg_comment_history":145400,"explore_item_avg_favorite_history":1700000,"explore_item_avg_resolution":540,"explore_item_portrait":1,"explore_item_100k_vv_vv":1,"explore_creator_bluev_vv":1,"explore_creator_1k_follower_vv":1,"explore_creator_10k_follower_vv":1,"explore_creator_100k_follower_vv":1,"push_cnt":1,"explore_to_hot_page_view":1,"slardar_perf_lcp_acc":5.77,"slardar_perf_lcp_cnt":1,"explore_slardar_perf_lcp_acc":5.77,"explore_slardar_perf_lcp_cnt":1,"hot_page_view":1,"hot_vv":3,"hot_item_avg_freshness":115,"hot_item_avg_duration":274,"hot_item_avg_like_history":28401600,"hot_item_avg_vv_history":214900000,"hot_item_avg_share_history":700833,"hot_item_avg_comment_history":100194,"hot_item_avg_favorite_history":1651000,"hot_item_avg_resolution":1620,"hot_item_portrait":3,"hot_item_100k_vv_vv":3,"hot_creator_bluev_vv":2,"hot_creator_1k_follower_vv":3,"hot_creator_10k_follower_vv":2,"hot_creator_100k_follower_vv":2,"play_duration":0.03,"hot_play_duration":0.03,"video_pause_by_switch_tab_cnt":1}},"3/23/2025":{"7484813122872641030":{"session_last_update_time":1742754875872,"stay_duration":1.58,"session_cnt":1,"os":"mac","browser_brand":"firefox","screen_resolution":1930176,"screen_orientation":1,"cpu_core_number":16,"region":"CA","launch_mode":"direct","landing_page":0,"language_system":"en-us","language_app":"en","timezone":-4,"time_of_day_landing":14,"day_of_week":0,"is_local_daytime":1,"is_login":false,"max_touch_points":0,"ret_acc":1,"total_score":8.12,"hardware_score":8.12,"first_active_date":0,"is_new_user":1,"page_view":1,"hot_page_view":1,"vv":1,"hot_vv":1,"item_avg_freshness":58,"item_avg_duration":93,"item_avg_like_history":325000,"item_avg_vv_history":2100000,"item_avg_share_history":15000,"item_avg_comment_history":1949,"item_avg_favorite_history":25500,"item_avg_resolution":720,"item_portrait":1,"item_100k_vv_vv":1,"creator_bluev_vv":0,"creator_1k_follower_vv":1,"creator_10k_follower_vv":1,"creator_100k_follower_vv":1,"hot_item_avg_freshness":58,"hot_item_avg_duration":93,"hot_item_avg_like_history":325000,"hot_item_avg_vv_history":2100000,"hot_item_avg_share_history":15000,"hot_item_avg_comment_history":1949,"hot_item_avg_favorite_history":25500,"hot_item_avg_resolution":720,"hot_item_portrait":1,"hot_item_100k_vv_vv":1,"hot_creator_bluev_vv":0,"hot_creator_1k_follower_vv":1,"hot_creator_10k_follower_vv":1,"hot_creator_100k_follower_vv":1,"slardar_perf_fcp_acc":1.99,"slardar_perf_fcp_cnt":1,"vv_finish":1,"hot_vv_finish":1}}}"

Running Object.keys(JSON.parse(localStorage.getItem("f_s_1"))) in web console on tiktok.com will give you an array of the days that TikTok is storing data on. This gives an estimate of the badness of the performance problem.

Can anyone who's still experiencing the problem run that code in the web console on tiktok.com and share the result?

The key under each date (e.g. 7484813122872641030) is the user_unique_id. I'd expect it's the same id for all dates.

This seems to be the schema for the data stored in f_s_1 it gives a rough idea of the events that trigger the performance problem and how much data can be stored for each day.

{
   "os": {
      "available_values": [
         "windows",
         "mac",
         "linux",
         "ios",
         "chromeos"
      ],
      "is_snapshot": true
   },
   "browser_brand": {
      "available_values": [
         "chrome",
         "edge",
         "safari",
         "firefox"
      ],
      "is_snapshot": true
   },
   "screen_resolution": {
      "is_snapshot": true
   },
   "screen_orientation": {
      "is_snapshot": true
   },
   "cpu_core_number": {
      "is_snapshot": true
   },
   "network_downlink": {
      "is_snapshot": true
   },
   "network_rtt": {
      "is_snapshot": true
   },
   "network_speed_effective_type": {
      "available_values": [
         "slow-2g",
         "2g",
         "3g",
         "4g"
      ],
      "is_snapshot": true
   },
   "region": {
      "available_values": [
         "US",
         "VN",
         "JP",
         "SG",
         "BR",
         "ID",
         "FR",
         "GB",
         "PH",
         "CA",
         "DE",
         "TH",
         "MX",
         "ES",
         "PE",
         "RU",
         "AU",
         "CO",
         "DZ",
         "UA",
         "MY",
         "KR",
         "TR",
         "AR",
         "NL",
         "IT",
         "PL",
         "TW",
         "FI",
         "PK",
         "SA",
         "EC",
         "CL",
         "EG",
         "ZA",
         "SE",
         "KZ",
         "RO",
         "AE",
         "BE"
      ],
      "is_snapshot": true
   },
   "launch_mode": {
      "available_values": [
         "organic",
         "reflow",
         "direct",
         "referral",
         "referral_embed",
         "msft",
         "webapp_reflow",
         "pwa",
         "twa",
         "referral_creator_embed",
         "push",
         "referral_amp",
         "referral_tiktok_browse",
         "referral_music_embed",
         "referral_hashtag_embed",
         "referral_curated_embed",
         "launch_mode_win_desktop_app",
         "launch_mode_mac_desktop_app"
      ],
      "is_snapshot": true
   },
   "landing_page": {
      "available_values": [
         "homepage_hot",
         "video_detail",
         "others_homepage",
         "discover_kw",
         "explore_page",
         "login",
         "personal_homepage",
         "general_search"
      ],
      "is_snapshot": true
   },
   "language_system": {
      "available_values": [
         "en-us",
         "vi-vn",
         "es-es",
         "en-gb",
         "zh-cn",
         "pt-br",
         "es-419",
         "ja",
         "ru-ru",
         "fr-fr",
         "de-de",
         "th-th",
         "es",
         "vi",
         "id-id",
         "fr",
         "es-us",
         "ru",
         "tr-tr",
         "en"
      ],
      "is_snapshot": true
   },
   "language_app": {
      "available_values": [
         "en",
         "es",
         "vi-VN",
         "pt-BR",
         "zh-Hans",
         "ru-RU",
         "null",
         "ja-JP",
         "id-ID",
         "th-TH",
         "ar",
         "fr",
         "tr-TR",
         "ko-KR",
         "zh-Hant-TW"
      ],
      "is_snapshot": true
   },
   "first_active_date": {
      "is_snapshot": true
   },
   "timezone": {
      "is_snapshot": true
   },
   "time_of_day_landing": {
      "is_snapshot": true
   },
   "day_of_week": {
      "is_snapshot": true
   },
   "is_new_user": {
      "is_snapshot": true
   },
   "is_local_daytime": {
      "is_snapshot": true
   },
   "is_login": {
      "is_snapshot": true
   },
   "max_touch_points": {
      "is_snapshot": true
   },
   "ret_acc": {},
   "session_cnt": {},
   "stay_duration": {},
   "vv": {
      "event_name": "video_play"
   },
   "vv_finish": {
      "event_name": "video_play_finish"
   },
   "preview_vv": {
      "event_name": "preview_video_play"
   },
   "play_duration": {
      "event_name": "play_time",
      "aggregate_field": "duration"
   },
   "page_view": {
      "event_name": "page_view"
   },
   "hot_page_view": {
      "event_name": "page_view",
      "page_name": "homepage_hot"
   },
   "hot_vv": {
      "event_name": "video_play",
      "page_name": "homepage_hot"
   },
   "hot_vv_finish": {
      "event_name": "video_play_finish",
      "page_name": "homepage_hot"
   },
   "hot_play_duration": {
      "event_name": "play_time",
      "page_name": "homepage_hot",
      "aggregate_field": "duration"
   },
   "video_detail_page_view": {
      "event_name": "page_view",
      "page_name": "video_detail"
   },
   "video_detail_vv": {
      "event_name": "video_play",
      "page_name": "video_detail"
   },
   "video_detail_vv_finish": {
      "event_name": "video_play_finish",
      "page_name": "video_detail"
   },
   "video_detail_play_duration": {
      "event_name": "play_time",
      "page_name": "video_detail",
      "aggregate_field": "duration"
   },
   "others_profile_page_view": {
      "event_name": "page_view",
      "page_name": "others_homepage"
   },
   "others_profile_vv": {
      "event_name": "video_play",
      "page_name": "others_homepage"
   },
   "others_profile_preview_vv": {
      "event_name": "preview_video_play",
      "page_name": "others_homepage"
   },
   "others_profile_vv_finish": {
      "event_name": "video_play_finish",
      "page_name": "others_homepage"
   },
   "others_profile_play_duration": {
      "event_name": "play_time",
      "page_name": "others_homepage",
      "aggregate_field": "duration"
   },
   "explore_page_view": {
      "event_name": "page_view",
      "page_name": "explore_page"
   },
   "explore_page_preview_vv": {
      "event_name": "preview_video_play",
      "page_name": "explore_page"
   },
   "explore_page_vv": {
      "event_name": "video_play",
      "page_name": "explore_page"
   },
   "explore_page_vv_finish": {
      "event_name": "video_play_finish",
      "page_name": "explore_page"
   },
   "explore_page_play_duration": {
      "event_name": "play_time",
      "page_name": "explore_page",
      "aggregate_field": "duration"
   },
   "self_profile_page_view": {
      "event_name": "page_view",
      "page_name": "personal_homepage"
   },
   "self_profile_vv": {
      "event_name": "video_play",
      "page_name": "personal_homepage"
   },
   "song_detail_page_view": {
      "event_name": "page_view",
      "page_name": "single_song"
   },
   "song_detail_vv": {
      "event_name": "video_play",
      "page_name": "single_song"
   },
   "song_detail_vv_finish": {
      "event_name": "video_play_finish",
      "page_name": "single_song"
   },
   "song_detail_play_duration": {
      "event_name": "play_time",
      "page_name": "single_song",
      "aggregate_field": "duration"
   },
   "challenge_page_view": {
      "event_name": "page_view",
      "page_name": "challenge"
   },
   "challenge_vv": {
      "event_name": "video_play",
      "page_name": "challenge"
   },
   "challenge_vv_finish": {
      "event_name": "video_play_finish",
      "page_name": "challenge"
   },
   "challenge_play_duration": {
      "event_name": "play_time",
      "page_name": "challenge",
      "aggregate_field": "duration"
   },
   "discover_kw_page_view": {
      "event_name": "page_view",
      "page_name": "discover_kw"
   },
   "discover_kw_vv": {
      "event_name": "video_play",
      "page_name": "discover_kw"
   },
   "discover_kw_vv_finish": {
      "event_name": "video_play_finish",
      "page_name": "discover_kw"
   },
   "discover_kw_play_duration": {
      "event_name": "play_time",
      "page_name": "discover_kw",
      "aggregate_field": "duration"
   },
   "follow_vv": {
      "event_name": "video_play",
      "page_name": "homepage_follow"
   },
   "live_recharge_page_view": {
      "event_name": "page_view",
      "page_name": "live_recharge"
   },
   "business_suite_page_view": {
      "event_name": "enter_business_suite"
   },
   "slardar_perf_lcp_acc": {
      "event_name": "slardar_perf_lcp",
      "aggregate_field": "metric_duration",
      "count_field_name": "slardar_perf_lcp_cnt",
      "is_avg": true
   },
   "slardar_perf_lcp_cnt": {
      "event_name": "slardar_perf_lcp",
      "should_skip_sending": true
   },
   "slardar_perf_fcp_acc": {
      "event_name": "slardar_perf_fcp",
      "aggregate_field": "metric_duration",
      "count_field_name": "slardar_perf_fcp_cnt",
      "is_avg": true
   },
   "slardar_perf_fcp_cnt": {
      "event_name": "slardar_perf_fcp",
      "should_skip_sending": true
   },
   "login_page_view": {
      "event_name": "page_view",
      "page_name": "login"
   },
   "general_search_page_view": {
      "event_name": "page_view",
      "page_name": "general_search"
   },
   "messages_page_view": {
      "event_name": "page_view",
      "page_name": "messages"
   },
   "upload_page_view": {
      "event_name": "page_view",
      "page_name": "upload"
   },
   "live_detail_page_view": {
      "event_name": "page_view",
      "page_name": "live_detail"
   },
   "search_cnt": {
      "event_name": "search"
   },
   "app_download_cnt": {
      "event_name": "click_get_app_for_pc"
   },
   "auto_scroll_cnt": {
      "event_name": "autoscroll_on"
   },
   "muted_cnt": {
      "event_name": "switch_sound"
   },
   "floating_player_cnt": {
      "event_name": "enter_mini_player"
   },
   "report_cnt": {
      "event_name": "click_report"
   },
   "not_interested_cnt": {
      "event_name": "dislike"
   },
   "publish_cnt": {
      "event_name": "click_upload_entrance"
   },
   "push_cnt": {
      "event_name": "browser_push_notifications_show"
   },
   "update_profile_cnt": {
      "event_name": "save_profile"
   },
   "livesdk_studio_download_cnt": {
      "event_name": "livesdk_web_livestudio_download"
   },
   "send_message_cnt": {
      "event_name": "send_message"
   },
   "share_to_friends_cnt": {
      "event_name": "share_video",
      "platform": "message"
   },
   "like_cnt": {
      "event_name": "like"
   },
   "comment_cnt": {
      "event_name": "post_comment"
   },
   "follow_cnt": {
      "event_name": "follow"
   },
   "favourite_cnt": {
      "event_name": "favourite_video"
   },
   "browser_mode_vv": {
      "event_name": "video_play",
      "play_mode": "browser_mode"
   },
   "playlist_vv": {
      "event_name": "video_play",
      "popup_type": "playlist"
   },
   "repost_cnt": {
      "event_name": "repost_success"
   },
   "share_cnt": {
      "event_name": "share_video"
   },
   "video_download_cnt": {
      "event_name": "click_download"
   },
   "left_navigation_suggested_account_visit_cnt": {
      "event_name": "enter_personal_detail",
      "enter_method": [
         "click_navigation"
      ]
   },
   "creator_tab_show_cnt": {
      "event_name": "from_this_creator_tab_show"
   },
   "login_notify_cnt_periodic": {
      "event_name": "login_notify",
      "enter_method": [
         "periodic_popup"
      ]
   },
   "login_notify_cnt_non_periodic": {
      "event_name": "login_notify",
      "enter_method": [
         "click_like",
         "click_comment",
         "click_follow",
         "click_top_bar",
         "click_navigation",
         "click_favorite"
      ]
   },
   "login_days_cnt": {},
   "login_submit_cnt": {
      "event_name": "login_submit"
   },
   "login_button_clicked_cnt": {
      "event_name": "login_notify",
      "enter_method": [
         "click_top_bar",
         "click_navigation"
      ]
   },
   "login_popup_duration": {
      "event_name": "login_notify_close",
      "start_event_name": "login_notify_time_stamp",
      "count_field_name": "login_notify_close_cnt",
      "is_time_stamp": true
   },
   "login_notify_time_stamp": {
      "event_name": "login_notify",
      "enter_method": [
         "click_like",
         "click_comment",
         "click_follow",
         "click_top_bar",
         "click_navigation",
         "click_favorite"
      ],
      "aggregate_field": "time_stamp",
      "should_skip_sending": true
   },
   "login_notify_close_cnt": {
      "event_name": "login_notify_close",
      "should_skip_sending": true
   },
   "toggle_dark_mode_cnt": {
      "event_name": "dark_mode_click"
   },
   "video_pause_by_switch_tab_cnt": {
      "event_name": "video_pause",
      "enter_method": [
         "switch_tab"
      ]
   },
   "like_cnt_non_login": {
      "event_name": "login_notify",
      "enter_method": [
         "click_like"
      ]
   },
   "comment_cnt_non_login": {
      "event_name": "login_notify",
      "enter_method": [
         "click_comment"
      ]
   },
   "follow_cnt_non_login": {
      "event_name": "login_notify",
      "enter_method": [
         "click_follow"
      ]
   },
   "favorite_cnt_non_login": {
      "event_name": "login_notify",
      "enter_method": [
         "click_favorite"
      ]
   },
   "item_avg_freshness": {
      "event_name": "video_play",
      "aggregate_field": "video_freshness",
      "count_field_name": "vv",
      "is_avg": true
   },
   "item_avg_duration": {
      "event_name": "video_play",
      "aggregate_field": "video_duration",
      "count_field_name": "vv",
      "is_avg": true
   },
   "item_avg_like_history": {
      "event_name": "video_play",
      "aggregate_field": "video_like_history",
      "count_field_name": "vv",
      "is_avg": true
   },
   "item_avg_vv_history": {
      "event_name": "video_play",
      "aggregate_field": "video_vv_history",
      "count_field_name": "vv",
      "is_avg": true
   },
   "item_avg_share_history": {
      "event_name": "video_play",
      "aggregate_field": "video_share_history",
      "count_field_name": "vv",
      "is_avg": true
   },
   "item_avg_comment_history": {
      "event_name": "video_play",
      "aggregate_field": "video_comment_history",
      "count_field_name": "vv",
      "is_avg": true
   },
   "item_avg_favorite_history": {
      "event_name": "video_play",
      "aggregate_field": "video_favorite_history",
      "count_field_name": "vv",
      "is_avg": true
   },
   "item_avg_resolution": {
      "event_name": "video_play",
      "aggregate_field": "video_resolution",
      "count_field_name": "vv",
      "is_avg": true
   },
   "item_portrait": {
      "event_name": "video_play",
      "aggregate_field": "video_is_portrait",
      "count_field_name": "vv",
      "is_avg": true
   },
   "item_100k_vv_vv": {
      "event_name": "video_play",
      "aggregate_field": "video_100k_vv"
   },
   "creator_bluev_vv": {
      "event_name": "video_play",
      "aggregate_field": "video_creator_bluev"
   },
   "creator_1k_follower_vv": {
      "event_name": "video_play",
      "aggregate_field": "video_creator_1k_follower"
   },
   "creator_10k_follower_vv": {
      "event_name": "video_play",
      "aggregate_field": "video_creator_10k_follower"
   },
   "creator_100k_follower_vv": {
      "event_name": "video_play",
      "aggregate_field": "video_creator_100k_follower"
   },
   "hot_like_cnt": {
      "event_name": "like",
      "page_name": "homepage_hot"
   },
   "hot_comment_cnt": {
      "event_name": "post_comment",
      "page_name": "homepage_hot"
   },
   "hot_follow_cnt": {
      "event_name": "follow",
      "page_name": "homepage_hot"
   },
   "hot_favourite_cnt": {
      "event_name": "favourite_video",
      "page_name": "homepage_hot"
   },
   "hot_browser_mode_vv": {
      "event_name": "video_play",
      "play_mode": "browser_mode",
      "page_name": "homepage_hot"
   },
   "hot_share_cnt": {
      "event_name": "share_video",
      "page_name": "homepage_hot"
   },
   "hot_item_avg_freshness": {
      "event_name": "video_play",
      "page_name": "homepage_hot",
      "aggregate_field": "video_freshness",
      "count_field_name": "hot_vv",
      "is_avg": true
   },
   "hot_item_avg_duration": {
      "event_name": "video_play",
      "page_name": "homepage_hot",
      "aggregate_field": "video_duration",
      "count_field_name": "hot_vv",
      "is_avg": true
   },
   "hot_item_avg_like_history": {
      "event_name": "video_play",
      "page_name": "homepage_hot",
      "aggregate_field": "video_like_history",
      "count_field_name": "hot_vv",
      "is_avg": true
   },
   "hot_item_avg_vv_history": {
      "event_name": "video_play",
      "page_name": "homepage_hot",
      "aggregate_field": "video_vv_history",
      "count_field_name": "hot_vv",
      "is_avg": true
   },
   "hot_item_avg_share_history": {
      "event_name": "video_play",
      "page_name": "homepage_hot",
      "aggregate_field": "video_share_history",
      "count_field_name": "hot_vv",
      "is_avg": true
   },
   "hot_item_avg_comment_history": {
      "event_name": "video_play",
      "page_name": "homepage_hot",
      "aggregate_field": "video_comment_history",
      "count_field_name": "hot_vv",
      "is_avg": true
   },
   "hot_item_avg_favorite_history": {
      "event_name": "video_play",
      "page_name": "homepage_hot",
      "aggregate_field": "video_favorite_history",
      "count_field_name": "hot_vv",
      "is_avg": true
   },
   "hot_item_avg_resolution": {
      "event_name": "video_play",
      "page_name": "homepage_hot",
      "aggregate_field": "video_resolution",
      "count_field_name": "hot_vv",
      "is_avg": true
   },
   "hot_item_portrait": {
      "event_name": "video_play",
      "page_name": "homepage_hot",
      "aggregate_field": "video_is_portrait",
      "count_field_name": "hot_vv",
      "is_avg": true
   },
   "hot_item_100k_vv_vv": {
      "event_name": "video_play",
      "page_name": "homepage_hot",
      "aggregate_field": "video_100k_vv"
   },
   "hot_creator_bluev_vv": {
      "event_name": "video_play",
      "page_name": "homepage_hot",
      "aggregate_field": "video_creator_bluev"
   },
   "hot_creator_1k_follower_vv": {
      "event_name": "video_play",
      "page_name": "homepage_hot",
      "aggregate_field": "video_creator_1k_follower"
   },
   "hot_creator_10k_follower_vv": {
      "event_name": "video_play",
      "page_name": "homepage_hot",
      "aggregate_field": "video_creator_10k_follower"
   },
   "hot_creator_100k_follower_vv": {
      "event_name": "video_play",
      "page_name": "homepage_hot",
      "aggregate_field": "video_creator_100k_follower"
   },
   "hot_to_video_detail_page_view": {
      "event_name": "page_view",
      "page_name": "video_detail",
      "previous_page": "homepage_hot"
   },
   "hot_to_explore_page_view": {
      "event_name": "enter_explore_page",
      "enter_from": "homepage_hot"
   },
   "hot_to_follow_page_view": {
      "event_name": "enter_homepage_follow",
      "enter_from": "homepage_hot"
   },
   "hot_to_other_profile_view": {
      "event_name": "enter_personal_detail",
      "enter_from": "homepage_hot"
   },
   "hot_slardar_perf_lcp_acc": {
      "event_name": "slardar_perf_lcp",
      "page_name": "homepage_hot",
      "aggregate_field": "metric_duration",
      "count_field_name": "hot_slardar_perf_lcp_cnt",
      "is_avg": true
   },
   "hot_slardar_perf_lcp_cnt": {
      "event_name": "slardar_perf_lcp",
      "page_name": "homepage_hot",
      "should_skip_sending": true
   },
   "explore_like_cnt": {
      "event_name": "like",
      "page_name": "explore_page"
   },
   "explore_comment_cnt": {
      "event_name": "post_comment",
      "page_name": "explore_page"
   },
   "explore_follow_cnt": {
      "event_name": "follow",
      "page_name": "explore_page"
   },
   "explore_favourite_cnt": {
      "event_name": "favourite_video",
      "page_name": "explore_page"
   },
   "explore_browser_mode_vv": {
      "event_name": "video_play",
      "play_mode": "browser_mode",
      "page_name": "explore_page"
   },
   "explore_share_cnt": {
      "event_name": "share_video",
      "page_name": "explore_page"
   },
   "explore_item_avg_freshness": {
      "event_name": "video_play",
      "page_name": "explore_page",
      "aggregate_field": "video_freshness",
      "count_field_name": "explore_page_vv",
      "is_avg": true
   },
   "explore_item_avg_duration": {
      "event_name": "video_play",
      "page_name": "explore_page",
      "aggregate_field": "video_duration",
      "count_field_name": "explore_page_vv",
      "is_avg": true
   },
   "explore_item_avg_like_history": {
      "event_name": "video_play",
      "page_name": "explore_page",
      "aggregate_field": "video_like_history",
      "count_field_name": "explore_page_vv",
      "is_avg": true
   },
   "explore_item_avg_vv_history": {
      "event_name": "video_play",
      "page_name": "explore_page",
      "aggregate_field": "video_vv_history",
      "count_field_name": "explore_page_vv",
      "is_avg": true
   },
   "explore_item_avg_share_history": {
      "event_name": "video_play",
      "page_name": "explore_page",
      "aggregate_field": "video_share_history",
      "count_field_name": "explore_page_vv",
      "is_avg": true
   },
   "explore_item_avg_comment_history": {
      "event_name": "video_play",
      "page_name": "explore_page",
      "aggregate_field": "video_comment_history",
      "count_field_name": "explore_page_vv",
      "is_avg": true
   },
   "explore_item_avg_favorite_history": {
      "event_name": "video_play",
      "page_name": "explore_page",
      "aggregate_field": "video_favorite_history",
      "count_field_name": "explore_page_vv",
      "is_avg": true
   },
   "explore_item_avg_resolution": {
      "event_name": "video_play",
      "page_name": "explore_page",
      "aggregate_field": "video_resolution",
      "count_field_name": "explore_page_vv",
      "is_avg": true
   },
   "explore_item_portrait": {
      "event_name": "video_play",
      "page_name": "explore_page",
      "aggregate_field": "video_is_portrait",
      "count_field_name": "explore_page_vv",
      "is_avg": true
   },
   "explore_item_100k_vv_vv": {
      "event_name": "video_play",
      "page_name": "explore_page",
      "aggregate_field": "video_100k_vv"
   },
   "explore_creator_bluev_vv": {
      "event_name": "video_play",
      "page_name": "explore_page",
      "aggregate_field": "video_creator_bluev"
   },
   "explore_creator_1k_follower_vv": {
      "event_name": "video_play",
      "page_name": "explore_page",
      "aggregate_field": "video_creator_1k_follower"
   },
   "explore_creator_10k_follower_vv": {
      "event_name": "video_play",
      "page_name": "explore_page",
      "aggregate_field": "video_creator_10k_follower"
   },
   "explore_creator_100k_follower_vv": {
      "event_name": "video_play",
      "page_name": "explore_page",
      "aggregate_field": "video_creator_100k_follower"
   },
   "explore_to_video_detail_page_view": {
      "event_name": "page_view",
      "page_name": "video_detail",
      "previous_page": "explore_page"
   },
   "explore_to_hot_page_view": {
      "event_name": "enter_homepage_hot",
      "enter_from": "explore_page"
   },
   "explore_to_follow_page_view": {
      "event_name": "enter_homepage_follow",
      "enter_from": "explore_page"
   },
   "explore_to_other_profile_view": {
      "event_name": "enter_personal_detail",
      "enter_from": "explore_page"
   },
   "explore_slardar_perf_lcp_acc": {
      "event_name": "slardar_perf_lcp",
      "page_name": "explore_page",
      "aggregate_field": "metric_duration",
      "count_field_name": "explore_slardar_perf_lcp_cnt",
      "is_avg": true
   },
   "explore_slardar_perf_lcp_cnt": {
      "event_name": "slardar_perf_lcp",
      "page_name": "explore_page",
      "should_skip_sending": true
   },
   "follow_like_cnt": {
      "event_name": "like",
      "page_name": "homepage_follow"
   },
   "follow_comment_cnt": {
      "event_name": "post_comment",
      "page_name": "homepage_follow"
   },
   "follow_follow_cnt": {
      "event_name": "follow",
      "page_name": "homepage_follow"
   },
   "follow_favourite_cnt": {
      "event_name": "favourite_video",
      "page_name": "homepage_follow"
   },
   "follow_browser_mode_vv": {
      "event_name": "video_play",
      "play_mode": "browser_mode",
      "page_name": "homepage_follow"
   },
   "follow_share_cnt": {
      "event_name": "share_video",
      "page_name": "homepage_follow"
   },
   "follow_item_avg_freshness": {
      "event_name": "video_play",
      "page_name": "homepage_follow",
      "aggregate_field": "video_freshness",
      "count_field_name": "follow_vv",
      "is_avg": true
   },
   "follow_item_avg_duration": {
      "event_name": "video_play",
      "page_name": "homepage_follow",
      "aggregate_field": "video_duration",
      "count_field_name": "follow_vv",
      "is_avg": true
   },
   "follow_item_avg_like_history": {
      "event_name": "video_play",
      "page_name": "homepage_follow",
      "aggregate_field": "video_like_history",
      "count_field_name": "follow_vv",
      "is_avg": true
   },
   "follow_item_avg_vv_history": {
      "event_name": "video_play",
      "page_name": "homepage_follow",
      "aggregate_field": "video_vv_history",
      "count_field_name": "follow_vv",
      "is_avg": true
   },
   "follow_item_avg_share_history": {
      "event_name": "video_play",
      "page_name": "homepage_follow",
      "aggregate_field": "video_share_history",
      "count_field_name": "follow_vv",
      "is_avg": true
   },
   "follow_item_avg_comment_history": {
      "event_name": "video_play",
      "page_name": "homepage_follow",
      "aggregate_field": "video_comment_history",
      "count_field_name": "follow_vv",
      "is_avg": true
   },
   "follow_item_avg_favorite_history": {
      "event_name": "video_play",
      "page_name": "homepage_follow",
      "aggregate_field": "video_favorite_history",
      "count_field_name": "follow_vv",
      "is_avg": true
   },
   "follow_item_avg_resolution": {
      "event_name": "video_play",
      "page_name": "homepage_follow",
      "aggregate_field": "video_resolution",
      "count_field_name": "follow_vv",
      "is_avg": true
   },
   "follow_item_portrait": {
      "event_name": "video_play",
      "page_name": "homepage_follow",
      "aggregate_field": "video_is_portrait",
      "count_field_name": "follow_vv",
      "is_avg": true
   },
   "follow_item_100k_vv_vv": {
      "event_name": "video_play",
      "page_name": "homepage_follow",
      "aggregate_field": "video_100k_vv"
   },
   "follow_creator_bluev_vv": {
      "event_name": "video_play",
      "page_name": "homepage_follow",
      "aggregate_field": "video_creator_bluev"
   },
   "follow_creator_1k_follower_vv": {
      "event_name": "video_play",
      "page_name": "homepage_follow",
      "aggregate_field": "video_creator_1k_follower"
   },
   "follow_creator_10k_follower_vv": {
      "event_name": "video_play",
      "page_name": "homepage_follow",
      "aggregate_field": "video_creator_10k_follower"
   },
   "follow_creator_100k_follower_vv": {
      "event_name": "video_play",
      "page_name": "homepage_follow",
      "aggregate_field": "video_creator_100k_follower"
   },
   "follow_to_video_detail_page_view": {
      "event_name": "page_view",
      "page_name": "video_detail",
      "previous_page": "homepage_follow"
   },
   "follow_to_explore_page_view": {
      "event_name": "enter_explore_page",
      "enter_from": "homepage_follow"
   },
   "follow_to_hot_page_view": {
      "event_name": "enter_homepage_hot",
      "enter_from": "homepage_follow"
   },
   "follow_to_other_profile_view": {
      "event_name": "enter_personal_detail",
      "enter_from": "homepage_follow"
   },
   "follow_slardar_perf_lcp_acc": {
      "event_name": "slardar_perf_lcp",
      "page_name": "homepage_follow",
      "aggregate_field": "metric_duration",
      "count_field_name": "follow_slardar_perf_lcp_cnt",
      "is_avg": true
   },
   "follow_slardar_perf_lcp_cnt": {
      "event_name": "slardar_perf_lcp",
      "page_name": "homepage_follow",
      "should_skip_sending": true
   },
   "video_detail_like_cnt": {
      "event_name": "like",
      "page_name": "video_detail"
   },
   "video_detail_comment_cnt": {
      "event_name": "post_comment",
      "page_name": "video_detail"
   },
   "video_detail_follow_cnt": {
      "event_name": "follow",
      "page_name": "video_detail"
   },
   "video_detail_favourite_cnt": {
      "event_name": "favourite_video",
      "page_name": "video_detail"
   },
   "video_detail_share_cnt": {
      "event_name": "share_video",
      "page_name": "video_detail"
   },
   "video_detail_item_avg_freshness": {
      "event_name": "video_play",
      "page_name": "video_detail",
      "aggregate_field": "video_freshness",
      "count_field_name": "video_detail_vv",
      "is_avg": true
   },
   "video_detail_item_avg_duration": {
      "event_name": "video_play",
      "page_name": "video_detail",
      "aggregate_field": "video_duration",
      "count_field_name": "video_detail_vv",
      "is_avg": true
   },
   "video_detail_item_avg_like_history": {
      "event_name": "video_play",
      "page_name": "video_detail",
      "aggregate_field": "video_like_history",
      "count_field_name": "video_detail_vv",
      "is_avg": true
   },
   "video_detail_item_avg_vv_history": {
      "event_name": "video_play",
      "page_name": "video_detail",
      "aggregate_field": "video_vv_history",
      "count_field_name": "video_detail_vv",
      "is_avg": true
   },
   "video_detail_item_avg_share_history": {
      "event_name": "video_play",
      "page_name": "video_detail",
      "aggregate_field": "video_share_history",
      "count_field_name": "video_detail_vv",
      "is_avg": true
   },
   "video_detail_item_avg_comment_history": {
      "event_name": "video_play",
      "page_name": "video_detail",
      "aggregate_field": "video_comment_history",
      "count_field_name": "video_detail_vv",
      "is_avg": true
   },
   "video_detail_item_avg_favorite_history": {
      "event_name": "video_play",
      "page_name": "video_detail",
      "aggregate_field": "video_favorite_history",
      "count_field_name": "video_detail_vv",
      "is_avg": true
   },
   "video_detail_item_avg_resolution": {
      "event_name": "video_play",
      "page_name": "video_detail",
      "aggregate_field": "video_resolution",
      "count_field_name": "video_detail_vv",
      "is_avg": true
   },
   "video_detail_item_portrait": {
      "event_name": "video_play",
      "page_name": "video_detail",
      "aggregate_field": "video_is_portrait",
      "count_field_name": "video_detail_vv",
      "is_avg": true
   },
   "video_detail_item_100k_vv_vv": {
      "event_name": "video_play",
      "page_name": "video_detail",
      "aggregate_field": "video_100k_vv"
   },
   "video_detail_creator_bluev_vv": {
      "event_name": "video_play",
      "page_name": "video_detail",
      "aggregate_field": "video_creator_bluev"
   },
   "video_detail_creator_1k_follower_vv": {
      "event_name": "video_play",
      "page_name": "video_detail",
      "aggregate_field": "video_creator_1k_follower"
   },
   "video_detail_creator_10k_follower_vv": {
      "event_name": "video_play",
      "page_name": "video_detail",
      "aggregate_field": "video_creator_10k_follower"
   },
   "video_detail_creator_100k_follower_vv": {
      "event_name": "video_play",
      "page_name": "video_detail",
      "aggregate_field": "video_creator_100k_follower"
   },
   "video_detail_to_hot_page_view": {
      "event_name": "enter_homepage_hot",
      "enter_from": "video_detail"
   },
   "video_detail_to_explore_page_view": {
      "event_name": "enter_explore_page",
      "enter_from": "video_detail"
   },
   "video_detail_to_follow_page_view": {
      "event_name": "enter_homepage_follow",
      "enter_from": "video_detail"
   },
   "video_detail_to_other_profile_view": {
      "event_name": "enter_personal_detail",
      "enter_from": "video_detail"
   },
   "video_detail_yml_cover_clicks_cnt": {
      "event_name": "video_cover_click"
   },
   "video_detail_slardar_perf_lcp_acc": {
      "event_name": "slardar_perf_lcp",
      "page_name": "video_detail",
      "aggregate_field": "metric_duration",
      "count_field_name": "video_detail_slardar_perf_lcp_cnt",
      "is_avg": true
   },
   "video_detail_slardar_perf_lcp_cnt": {
      "event_name": "slardar_perf_lcp",
      "page_name": "video_detail",
      "should_skip_sending": true
   },
   "other_profile_creator_bluev_vv": {
      "event_name": "video_play",
      "page_name": "others_homepage",
      "aggregate_field": "video_creator_bluev"
   },
   "other_profile_creator_1k_follower_vv": {
      "event_name": "video_play",
      "page_name": "others_homepage",
      "aggregate_field": "video_creator_1k_follower"
   },
   "other_profile_creator_10k_follower_vv": {
      "event_name": "video_play",
      "page_name": "others_homepage",
      "aggregate_field": "video_creator_10k_follower"
   },
   "other_profile_creator_100k_follower_vv": {
      "event_name": "video_play",
      "page_name": "others_homepage",
      "aggregate_field": "video_creator_100k_follower"
   },
   "other_profile_to_video_detail_page_view": {
      "event_name": "page_view",
      "page_name": "video_detail",
      "previous_page": "others_homepage"
   },
   "other_profile_to_hot_page_view": {
      "event_name": "enter_homepage_hot",
      "enter_from": "others_homepage"
   },
   "other_profile_to_follow_view": {
      "event_name": "enter_homepage_follow",
      "enter_from": "others_homepage"
   },
   "other_profile_to_explore_page_view": {
      "event_name": "enter_explore_page",
      "enter_from": "others_homepage"
   },
   "other_profile_playlist_vv": {
      "event_name": "video_play",
      "popup_type": "playlist",
      "page_name": "others_homepage"
   },
   "other_profile_follow_cnt": {
      "event_name": "follow",
      "page_name": "others_homepage"
   },
   "other_profile_send_message_cnt": {
      "event_name": "send_message",
      "page_name": "others_homepage"
   },
   "other_profile_sort_cnt": {
      "event_name": "click_sort_option"
   },
   "other_profile_share_user_profile_cnt": {
      "event_name": "share",
      "page_name": "others_homepage",
      "type": "profile"
   },
   "other_profile_slardar_perf_lcp_acc": {
      "event_name": "slardar_perf_lcp",
      "page_name": "others_homepage",
      "aggregate_field": "metric_duration",
      "count_field_name": "other_profile_slardar_perf_lcp_cnt",
      "is_avg": true
   },
   "other_profile_slardar_perf_lcp_cnt": {
      "event_name": "slardar_perf_lcp",
      "page_name": "others_homepage",
      "should_skip_sending": true
   },
   "ret_acc_3": {
      "is_retention": true,
      "retention_count": 3
   },
   "ret_acc_7": {
      "is_retention": true,
      "retention_count": 7
   },
   "total_score": {
      "is_snapshot": true
   },
   "hardware_score": {
      "is_snapshot": true
   }
}
Attachment #9473816 - Flags: approval-mozilla-beta? → approval-mozilla-beta+

Comment on attachment 9473816 [details]
Bug 1954323: Cache DateTimeFormat for Date.prototype.toLocaleString when locales argument is used. r=#spidermonkey-reviewers!

ESR Uplift Approval Request

  • If this is not a sec:{high,crit} bug, please state case for ESR consideration: This improves a major performance problem on TikTok
  • User impact if declined: Very bad performance on TikTok. Some users are seeing jank on the order of multiple seconds between events. And unreponsiveness for 10s of seconds.
  • Fix Landed on Version: 136
  • Risk to taking this patch: Low
  • Why is the change risky/not risky? (and alternatives if risky): The fix is a performance fix and shouldn't have any noticeable change in the results of the function.
Attachment #9473816 - Flags: approval-mozilla-esr115?

Comment on attachment 9473816 [details]
Bug 1954323: Cache DateTimeFormat for Date.prototype.toLocaleString when locales argument is used. r=#spidermonkey-reviewers!

Approved for 136.0.3

Attachment #9473816 - Flags: approval-mozilla-release? → approval-mozilla-release+
Attachment #9473816 - Flags: approval-mozilla-esr115? → approval-mozilla-esr128?
Attachment #9473816 - Flags: approval-mozilla-esr128? → approval-mozilla-esr128+

I can't seem to be able to reproduce a performance issue on TikTok. I've tried scrolling through posts on Windows 10, Ubuntu 22 and MacOS 11, in different builds before the fix (Nightly v138.0a1 from 2025-03-21, Beta v137.0b3 and Release v135.0.1 and v136.0.1). Observed performance is in accordance with the capabilities of the tested system. No considerable waiting for loading was necessary.

I've also tried reproducing by logging in and out, flipping the media.hardware-video-decoding.enabled true and false.

I've also performed a sanity on build versions with the fix (Nightly v138.0a1, Beta v137.0b10 and Release v136.0.3, ESR v128). No performance issues are observed. Tested in Windows 10, MacOS 11 and Ubuntu 22.

Summary: TikTok Nearly Unusable on Firefox 136+ → TikTok Nearly Unusable on Firefox

I'm changing the summary to be more specific so that in the future if there are further TikTok problems people will hopefully file new bugs.

Summary: TikTok Nearly Unusable on Firefox → Very high CPU usage on TikTok from toLocaleDateString

Verified, works as expected.

Tested with:

Browser / Version: Firefox 137.0-candidate build 1
Operating System: Windows 10

Status: RESOLVED → VERIFIED
You need to log in before you can comment on or make changes to this bug.

Attachment

General

Creator:
Created:
Updated:
Size: