Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(3)

Side by Side Diff: tools/telemetry/telemetry/web_perf/metrics/mainthread_jank_stats.py

Issue 1647513002: Delete tools/telemetry. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 # Copyright 2014 The Chromium Authors. All rights reserved.
2 # Use of this source code is governed by a BSD-style license that can be
3 # found in the LICENSE file.
4
5
6 # A top level slice of a main thread can cause the webapp to behave
7 # unresponsively if its thread duration is greater than or equals to
8 # USER_PERCEIVABLE_DELAY_THRESHOLD_MS. Human eyes can perceive delay at low as
9 # 100ms, but since we use thread time instead of wall-time, we reduce the
10 # threshold further to 50ms to make room for other OS's activities.
11 USER_PERCEIVABLE_DELAY_THRESHOLD_MS = 50
12
13
14 class _MainthreadJankStat(object):
15 """A small wrapper class for storing mainthread jank stats computed for
16 single record.
17 """
18
19 def __init__(self):
20 self.sum_big_top_slices_thread_time = 0
21 self.biggest_top_slice_thread_time = 0
22
23
24 def _ComputeMainthreadJankStatsForRecord(renderer_thread, record):
25 """Computes the mainthread jank stat on a record range.
26
27 Returns:
28 An instance of _MainthreadJankStat, which has:
29
30 sum_big_top_slices_thread_time is the total thread duration of all top
31 slices whose thread time ranges overlapped with (thread_start, thread_end)
32 and the overlapped thread duration is greater than or equal
33 USER_PERCEIVABLE_DELAY_THRESHOLD_MS.
34
35 biggest_top_slice_thread_time is the biggest thread duration of all
36 top slices whose thread time ranges overlapped with
37 (thread_start, thread_end).
38
39 Note: thread duration of each slices is computed using overlapped range
40 with (thread_start, thread_end).
41 """
42 stat = _MainthreadJankStat()
43 for s in renderer_thread.toplevel_slices:
44 jank_thread_duration = record.GetOverlappedThreadTimeForSlice(s)
45 stat.biggest_top_slice_thread_time = max(
46 stat.biggest_top_slice_thread_time, jank_thread_duration)
47 if jank_thread_duration >= USER_PERCEIVABLE_DELAY_THRESHOLD_MS:
48 stat.sum_big_top_slices_thread_time += jank_thread_duration
49 return stat
50
51
52 class MainthreadJankStats(object):
53 """
54 Utility class for extracting main thread jank statistics from the timeline
55 (or other loggin facilities), and providing them in a common format to
56 classes that compute benchmark metrics from this data.
57
58 total_big_jank_thread_time is the total thread duration of all top
59 slices whose thread time ranges overlapped with any thread time ranges of
60 the records and the overlapped thread duration is greater than or equal
61 USER_PERCEIVABLE_DELAY_THRESHOLD_MS.
62
63 biggest_jank_thread_time is the biggest thread duration of all
64 top slices whose thread time ranges overlapped with any of records' thread
65 time ranges.
66 """
67
68 def __init__(self, renderer_thread, interaction_records):
69 self._renderer_thread = renderer_thread
70 self._interaction_records = interaction_records
71 self._total_big_jank_thread_time = 0
72 self._biggest_jank_thread_time = 0
73 self._ComputeMainthreadJankStats()
74
75 @property
76 def total_big_jank_thread_time(self):
77 return self._total_big_jank_thread_time
78
79 @property
80 def biggest_jank_thread_time(self):
81 return self._biggest_jank_thread_time
82
83 def _ComputeMainthreadJankStats(self):
84 for record in self._interaction_records:
85 record_jank_stat = _ComputeMainthreadJankStatsForRecord(
86 self._renderer_thread, record)
87 self._total_big_jank_thread_time += (
88 record_jank_stat.sum_big_top_slices_thread_time)
89 self._biggest_jank_thread_time = (
90 max(self._biggest_jank_thread_time,
91 record_jank_stat.biggest_top_slice_thread_time))
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698