1 2<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> 3<html><head><title>Python: module telemetry.web_perf.timeline_interaction_record</title> 4<meta charset="utf-8"> 5</head><body bgcolor="#f0f0f8"> 6 7<table width="100%" cellspacing=0 cellpadding=2 border=0 summary="heading"> 8<tr bgcolor="#7799ee"> 9<td valign=bottom> <br> 10<font color="#ffffff" face="helvetica, arial"> <br><big><big><strong><a href="telemetry.html"><font color="#ffffff">telemetry</font></a>.<a href="telemetry.web_perf.html"><font color="#ffffff">web_perf</font></a>.timeline_interaction_record</strong></big></big></font></td 11><td align=right valign=bottom 12><font color="#ffffff" face="helvetica, arial"><a href=".">index</a><br><a href="../telemetry/web_perf/timeline_interaction_record.py">telemetry/web_perf/timeline_interaction_record.py</a></font></td></tr></table> 13 <p><tt># Copyright 2014 The Chromium Authors. All rights reserved.<br> 14# Use of this source code is governed by a BSD-style license that can be<br> 15# found in the LICENSE file.</tt></p> 16<p> 17<table width="100%" cellspacing=0 cellpadding=2 border=0 summary="section"> 18<tr bgcolor="#aa55cc"> 19<td colspan=3 valign=bottom> <br> 20<font color="#ffffff" face="helvetica, arial"><big><strong>Modules</strong></big></font></td></tr> 21 22<tr><td bgcolor="#aa55cc"><tt> </tt></td><td> </td> 23<td width="100%"><table width="100%" summary="list"><tr><td width="25%" valign=top><a href="telemetry.decorators.html">telemetry.decorators</a><br> 24</td><td width="25%" valign=top><a href="re.html">re</a><br> 25</td><td width="25%" valign=top><a href="telemetry.timeline.bounds.html">telemetry.timeline.bounds</a><br> 26</td><td width="25%" valign=top></td></tr></table></td></tr></table><p> 27<table width="100%" cellspacing=0 cellpadding=2 border=0 summary="section"> 28<tr bgcolor="#ee77aa"> 29<td colspan=3 valign=bottom> <br> 30<font color="#ffffff" face="helvetica, arial"><big><strong>Classes</strong></big></font></td></tr> 31 32<tr><td bgcolor="#ee77aa"><tt> </tt></td><td> </td> 33<td width="100%"><dl> 34<dt><font face="helvetica, arial"><a href="__builtin__.html#object">__builtin__.object</a> 35</font></dt><dd> 36<dl> 37<dt><font face="helvetica, arial"><a href="telemetry.web_perf.timeline_interaction_record.html#TimelineInteractionRecord">TimelineInteractionRecord</a> 38</font></dt></dl> 39</dd> 40<dt><font face="helvetica, arial"><a href="exceptions.html#Exception">exceptions.Exception</a>(<a href="exceptions.html#BaseException">exceptions.BaseException</a>) 41</font></dt><dd> 42<dl> 43<dt><font face="helvetica, arial"><a href="telemetry.web_perf.timeline_interaction_record.html#ThreadTimeRangeOverlappedException">ThreadTimeRangeOverlappedException</a> 44</font></dt><dd> 45<dl> 46<dt><font face="helvetica, arial"><a href="telemetry.web_perf.timeline_interaction_record.html#NoThreadTimeDataException">NoThreadTimeDataException</a> 47</font></dt></dl> 48</dd> 49</dl> 50</dd> 51</dl> 52 <p> 53<table width="100%" cellspacing=0 cellpadding=2 border=0 summary="section"> 54<tr bgcolor="#ffc8d8"> 55<td colspan=3 valign=bottom> <br> 56<font color="#000000" face="helvetica, arial"><a name="NoThreadTimeDataException">class <strong>NoThreadTimeDataException</strong></a>(<a href="telemetry.web_perf.timeline_interaction_record.html#ThreadTimeRangeOverlappedException">ThreadTimeRangeOverlappedException</a>)</font></td></tr> 57 58<tr bgcolor="#ffc8d8"><td rowspan=2><tt> </tt></td> 59<td colspan=2><tt><a href="exceptions.html#Exception">Exception</a> that can be thrown if there is not sufficient thread time data<br> 60to compute the overlapped thread time range.<br> </tt></td></tr> 61<tr><td> </td> 62<td width="100%"><dl><dt>Method resolution order:</dt> 63<dd><a href="telemetry.web_perf.timeline_interaction_record.html#NoThreadTimeDataException">NoThreadTimeDataException</a></dd> 64<dd><a href="telemetry.web_perf.timeline_interaction_record.html#ThreadTimeRangeOverlappedException">ThreadTimeRangeOverlappedException</a></dd> 65<dd><a href="exceptions.html#Exception">exceptions.Exception</a></dd> 66<dd><a href="exceptions.html#BaseException">exceptions.BaseException</a></dd> 67<dd><a href="__builtin__.html#object">__builtin__.object</a></dd> 68</dl> 69<hr> 70Data descriptors inherited from <a href="telemetry.web_perf.timeline_interaction_record.html#ThreadTimeRangeOverlappedException">ThreadTimeRangeOverlappedException</a>:<br> 71<dl><dt><strong>__weakref__</strong></dt> 72<dd><tt>list of weak references to the object (if defined)</tt></dd> 73</dl> 74<hr> 75Methods inherited from <a href="exceptions.html#Exception">exceptions.Exception</a>:<br> 76<dl><dt><a name="NoThreadTimeDataException-__init__"><strong>__init__</strong></a>(...)</dt><dd><tt>x.<a href="#NoThreadTimeDataException-__init__">__init__</a>(...) initializes x; see help(type(x)) for signature</tt></dd></dl> 77 78<hr> 79Data and other attributes inherited from <a href="exceptions.html#Exception">exceptions.Exception</a>:<br> 80<dl><dt><strong>__new__</strong> = <built-in method __new__ of type object><dd><tt>T.<a href="#NoThreadTimeDataException-__new__">__new__</a>(S, ...) -> a new <a href="__builtin__.html#object">object</a> with type S, a subtype of T</tt></dl> 81 82<hr> 83Methods inherited from <a href="exceptions.html#BaseException">exceptions.BaseException</a>:<br> 84<dl><dt><a name="NoThreadTimeDataException-__delattr__"><strong>__delattr__</strong></a>(...)</dt><dd><tt>x.<a href="#NoThreadTimeDataException-__delattr__">__delattr__</a>('name') <==> del x.name</tt></dd></dl> 85 86<dl><dt><a name="NoThreadTimeDataException-__getattribute__"><strong>__getattribute__</strong></a>(...)</dt><dd><tt>x.<a href="#NoThreadTimeDataException-__getattribute__">__getattribute__</a>('name') <==> x.name</tt></dd></dl> 87 88<dl><dt><a name="NoThreadTimeDataException-__getitem__"><strong>__getitem__</strong></a>(...)</dt><dd><tt>x.<a href="#NoThreadTimeDataException-__getitem__">__getitem__</a>(y) <==> x[y]</tt></dd></dl> 89 90<dl><dt><a name="NoThreadTimeDataException-__getslice__"><strong>__getslice__</strong></a>(...)</dt><dd><tt>x.<a href="#NoThreadTimeDataException-__getslice__">__getslice__</a>(i, j) <==> x[i:j]<br> 91 <br> 92Use of negative indices is not supported.</tt></dd></dl> 93 94<dl><dt><a name="NoThreadTimeDataException-__reduce__"><strong>__reduce__</strong></a>(...)</dt></dl> 95 96<dl><dt><a name="NoThreadTimeDataException-__repr__"><strong>__repr__</strong></a>(...)</dt><dd><tt>x.<a href="#NoThreadTimeDataException-__repr__">__repr__</a>() <==> repr(x)</tt></dd></dl> 97 98<dl><dt><a name="NoThreadTimeDataException-__setattr__"><strong>__setattr__</strong></a>(...)</dt><dd><tt>x.<a href="#NoThreadTimeDataException-__setattr__">__setattr__</a>('name', value) <==> x.name = value</tt></dd></dl> 99 100<dl><dt><a name="NoThreadTimeDataException-__setstate__"><strong>__setstate__</strong></a>(...)</dt></dl> 101 102<dl><dt><a name="NoThreadTimeDataException-__str__"><strong>__str__</strong></a>(...)</dt><dd><tt>x.<a href="#NoThreadTimeDataException-__str__">__str__</a>() <==> str(x)</tt></dd></dl> 103 104<dl><dt><a name="NoThreadTimeDataException-__unicode__"><strong>__unicode__</strong></a>(...)</dt></dl> 105 106<hr> 107Data descriptors inherited from <a href="exceptions.html#BaseException">exceptions.BaseException</a>:<br> 108<dl><dt><strong>__dict__</strong></dt> 109</dl> 110<dl><dt><strong>args</strong></dt> 111</dl> 112<dl><dt><strong>message</strong></dt> 113</dl> 114</td></tr></table> <p> 115<table width="100%" cellspacing=0 cellpadding=2 border=0 summary="section"> 116<tr bgcolor="#ffc8d8"> 117<td colspan=3 valign=bottom> <br> 118<font color="#000000" face="helvetica, arial"><a name="ThreadTimeRangeOverlappedException">class <strong>ThreadTimeRangeOverlappedException</strong></a>(<a href="exceptions.html#Exception">exceptions.Exception</a>)</font></td></tr> 119 120<tr bgcolor="#ffc8d8"><td rowspan=2><tt> </tt></td> 121<td colspan=2><tt><a href="exceptions.html#Exception">Exception</a> that can be thrown when computing overlapped thread time range<br> 122with other events.<br> </tt></td></tr> 123<tr><td> </td> 124<td width="100%"><dl><dt>Method resolution order:</dt> 125<dd><a href="telemetry.web_perf.timeline_interaction_record.html#ThreadTimeRangeOverlappedException">ThreadTimeRangeOverlappedException</a></dd> 126<dd><a href="exceptions.html#Exception">exceptions.Exception</a></dd> 127<dd><a href="exceptions.html#BaseException">exceptions.BaseException</a></dd> 128<dd><a href="__builtin__.html#object">__builtin__.object</a></dd> 129</dl> 130<hr> 131Data descriptors defined here:<br> 132<dl><dt><strong>__weakref__</strong></dt> 133<dd><tt>list of weak references to the object (if defined)</tt></dd> 134</dl> 135<hr> 136Methods inherited from <a href="exceptions.html#Exception">exceptions.Exception</a>:<br> 137<dl><dt><a name="ThreadTimeRangeOverlappedException-__init__"><strong>__init__</strong></a>(...)</dt><dd><tt>x.<a href="#ThreadTimeRangeOverlappedException-__init__">__init__</a>(...) initializes x; see help(type(x)) for signature</tt></dd></dl> 138 139<hr> 140Data and other attributes inherited from <a href="exceptions.html#Exception">exceptions.Exception</a>:<br> 141<dl><dt><strong>__new__</strong> = <built-in method __new__ of type object><dd><tt>T.<a href="#ThreadTimeRangeOverlappedException-__new__">__new__</a>(S, ...) -> a new <a href="__builtin__.html#object">object</a> with type S, a subtype of T</tt></dl> 142 143<hr> 144Methods inherited from <a href="exceptions.html#BaseException">exceptions.BaseException</a>:<br> 145<dl><dt><a name="ThreadTimeRangeOverlappedException-__delattr__"><strong>__delattr__</strong></a>(...)</dt><dd><tt>x.<a href="#ThreadTimeRangeOverlappedException-__delattr__">__delattr__</a>('name') <==> del x.name</tt></dd></dl> 146 147<dl><dt><a name="ThreadTimeRangeOverlappedException-__getattribute__"><strong>__getattribute__</strong></a>(...)</dt><dd><tt>x.<a href="#ThreadTimeRangeOverlappedException-__getattribute__">__getattribute__</a>('name') <==> x.name</tt></dd></dl> 148 149<dl><dt><a name="ThreadTimeRangeOverlappedException-__getitem__"><strong>__getitem__</strong></a>(...)</dt><dd><tt>x.<a href="#ThreadTimeRangeOverlappedException-__getitem__">__getitem__</a>(y) <==> x[y]</tt></dd></dl> 150 151<dl><dt><a name="ThreadTimeRangeOverlappedException-__getslice__"><strong>__getslice__</strong></a>(...)</dt><dd><tt>x.<a href="#ThreadTimeRangeOverlappedException-__getslice__">__getslice__</a>(i, j) <==> x[i:j]<br> 152 <br> 153Use of negative indices is not supported.</tt></dd></dl> 154 155<dl><dt><a name="ThreadTimeRangeOverlappedException-__reduce__"><strong>__reduce__</strong></a>(...)</dt></dl> 156 157<dl><dt><a name="ThreadTimeRangeOverlappedException-__repr__"><strong>__repr__</strong></a>(...)</dt><dd><tt>x.<a href="#ThreadTimeRangeOverlappedException-__repr__">__repr__</a>() <==> repr(x)</tt></dd></dl> 158 159<dl><dt><a name="ThreadTimeRangeOverlappedException-__setattr__"><strong>__setattr__</strong></a>(...)</dt><dd><tt>x.<a href="#ThreadTimeRangeOverlappedException-__setattr__">__setattr__</a>('name', value) <==> x.name = value</tt></dd></dl> 160 161<dl><dt><a name="ThreadTimeRangeOverlappedException-__setstate__"><strong>__setstate__</strong></a>(...)</dt></dl> 162 163<dl><dt><a name="ThreadTimeRangeOverlappedException-__str__"><strong>__str__</strong></a>(...)</dt><dd><tt>x.<a href="#ThreadTimeRangeOverlappedException-__str__">__str__</a>() <==> str(x)</tt></dd></dl> 164 165<dl><dt><a name="ThreadTimeRangeOverlappedException-__unicode__"><strong>__unicode__</strong></a>(...)</dt></dl> 166 167<hr> 168Data descriptors inherited from <a href="exceptions.html#BaseException">exceptions.BaseException</a>:<br> 169<dl><dt><strong>__dict__</strong></dt> 170</dl> 171<dl><dt><strong>args</strong></dt> 172</dl> 173<dl><dt><strong>message</strong></dt> 174</dl> 175</td></tr></table> <p> 176<table width="100%" cellspacing=0 cellpadding=2 border=0 summary="section"> 177<tr bgcolor="#ffc8d8"> 178<td colspan=3 valign=bottom> <br> 179<font color="#000000" face="helvetica, arial"><a name="TimelineInteractionRecord">class <strong>TimelineInteractionRecord</strong></a>(<a href="__builtin__.html#object">__builtin__.object</a>)</font></td></tr> 180 181<tr bgcolor="#ffc8d8"><td rowspan=2><tt> </tt></td> 182<td colspan=2><tt>Represents an interaction that took place during a timeline recording.<br> 183 <br> 184As a page runs, typically a number of different (simulated) user interactions<br> 185take place. For instance, a user might click a button in a mail app causing a<br> 186popup to animate in. Then they might press another button that sends data to a<br> 187server and simultaneously closes the popup without an animation. These are two<br> 188interactions.<br> 189 <br> 190From the point of view of the page, each interaction might have a different<br> 191label: ClickComposeButton and SendEmail, for instance. From the point<br> 192of view of the benchmarking harness, the labels aren't so interesting as what<br> 193the performance expectations are for that interaction: was it loading<br> 194resources from the network? was there an animation?<br> 195 <br> 196Determining these things is hard to do, simply by observing the state given to<br> 197a page from javascript. There are hints, for instance if network requests are<br> 198sent, or if a CSS animation is pending. But this is by no means a complete<br> 199story.<br> 200 <br> 201Instead, we expect pages to mark up the timeline what they are doing, with<br> 202label and flags indicating the semantics of that interaction. This<br> 203is currently done by pushing markers into the console.time/timeEnd API: this<br> 204for instance can be issued in JS:<br> 205 <br> 206 var str = 'Interaction.SendEmail';<br> 207 console.time(str);<br> 208 setTimeout(function() {<br> 209 console.timeEnd(str);<br> 210 }, 1000);<br> 211 <br> 212When run with perf.measurements.timeline_based_measurement running, this will<br> 213then cause a <a href="#TimelineInteractionRecord">TimelineInteractionRecord</a> to be created for this range with<br> 214all metrics reported for the marked up 1000ms time-range.<br> 215 <br> 216The valid interaction flags are:<br> 217 * repeatable: Allows other interactions to use the same label<br> </tt></td></tr> 218<tr><td> </td> 219<td width="100%">Methods defined here:<br> 220<dl><dt><a name="TimelineInteractionRecord-GetBounds"><strong>GetBounds</strong></a>(*args, **kwargs)</dt></dl> 221 222<dl><dt><a name="TimelineInteractionRecord-GetOverlappedThreadTimeForSlice"><strong>GetOverlappedThreadTimeForSlice</strong></a>(self, timeline_slice)</dt><dd><tt>Get the thread duration of timeline_slice that overlaps with this record.<br> 223 <br> 224There are two cases :<br> 225 <br> 226Case 1: timeline_slice runs in the same thread as the record.<br> 227 <br> 228 | [ timeline_slice ]<br> 229 THREAD 1 | | |<br> 230 | record starts record ends<br> 231 <br> 232 (relative order in thread time)<br> 233 <br> 234 As the thread timestamps in timeline_slice and record are consistent, we<br> 235 simply use them to compute the overlap.<br> 236 <br> 237Case 2: timeline_slice runs in a different thread from the record's.<br> 238 <br> 239 |<br> 240 THREAD 2 | [ timeline_slice ]<br> 241 |<br> 242 <br> 243 |<br> 244 THREAD 1 | | |<br> 245 | record starts record ends<br> 246 <br> 247 (relative order in wall-time)<br> 248 <br> 249 Unlike case 1, thread timestamps of a thread are measured by its<br> 250 thread-specific clock, which is inconsistent with that of the other<br> 251 thread, and thus can't be used to compute the overlapped thread duration.<br> 252 Hence, we use a heuristic to compute the overlap (see<br> 253 _GetOverlappedThreadTimeForSliceInDifferentThread for more details)<br> 254 <br> 255Args:<br> 256 timeline_slice: An instance of telemetry.timeline.slice.Slice</tt></dd></dl> 257 258<dl><dt><a name="TimelineInteractionRecord-__init__"><strong>__init__</strong></a>(self, label, start, end, async_event<font color="#909090">=None</font>, flags<font color="#909090">=None</font>)</dt></dl> 259 260<dl><dt><a name="TimelineInteractionRecord-__repr__"><strong>__repr__</strong></a>(self)</dt></dl> 261 262<hr> 263Class methods defined here:<br> 264<dl><dt><a name="TimelineInteractionRecord-FromAsyncEvent"><strong>FromAsyncEvent</strong></a>(cls, async_event)<font color="#909090"><font face="helvetica, arial"> from <a href="__builtin__.html#type">__builtin__.type</a></font></font></dt><dd><tt>Construct an timeline_interaction_record from an async event.<br> 265Args:<br> 266 async_event: An instance of<br> 267 telemetry.timeline.async_slices.AsyncSlice</tt></dd></dl> 268 269<hr> 270Data descriptors defined here:<br> 271<dl><dt><strong>__dict__</strong></dt> 272<dd><tt>dictionary for instance variables (if defined)</tt></dd> 273</dl> 274<dl><dt><strong>__weakref__</strong></dt> 275<dd><tt>list of weak references to the object (if defined)</tt></dd> 276</dl> 277<dl><dt><strong>end</strong></dt> 278</dl> 279<dl><dt><strong>label</strong></dt> 280</dl> 281<dl><dt><strong>repeatable</strong></dt> 282</dl> 283<dl><dt><strong>start</strong></dt> 284</dl> 285</td></tr></table></td></tr></table><p> 286<table width="100%" cellspacing=0 cellpadding=2 border=0 summary="section"> 287<tr bgcolor="#eeaa77"> 288<td colspan=3 valign=bottom> <br> 289<font color="#ffffff" face="helvetica, arial"><big><strong>Functions</strong></big></font></td></tr> 290 291<tr><td bgcolor="#eeaa77"><tt> </tt></td><td> </td> 292<td width="100%"><dl><dt><a name="-GetJavaScriptMarker"><strong>GetJavaScriptMarker</strong></a>(label, flags)</dt><dd><tt>Computes the marker string of an interaction record.<br> 293 <br> 294This marker string can be used with JavaScript API console.time()<br> 295and console.timeEnd() to mark the beginning and end of the<br> 296interaction record..<br> 297 <br> 298Args:<br> 299 label: The label used to identify the interaction record.<br> 300 flags: the flags for the interaction record see FLAGS above.<br> 301 <br> 302Returns:<br> 303 The interaction record marker string (e.g., Interaction.Label/flag1,flag2).<br> 304 <br> 305Raises:<br> 306 AssertionError: If one or more of the flags is unrecognized.</tt></dd></dl> 307 <dl><dt><a name="-IsTimelineInteractionRecord"><strong>IsTimelineInteractionRecord</strong></a>(event_name)</dt></dl> 308</td></tr></table><p> 309<table width="100%" cellspacing=0 cellpadding=2 border=0 summary="section"> 310<tr bgcolor="#55aa55"> 311<td colspan=3 valign=bottom> <br> 312<font color="#ffffff" face="helvetica, arial"><big><strong>Data</strong></big></font></td></tr> 313 314<tr><td bgcolor="#55aa55"><tt> </tt></td><td> </td> 315<td width="100%"><strong>FLAGS</strong> = ['repeatable']<br> 316<strong>REPEATABLE</strong> = 'repeatable'</td></tr></table> 317</body></html>