Chromium Code Reviews| OLD | NEW |
|---|---|
| (Empty) | |
| 1 <!DOCTYPE html> | |
| 2 <html> | |
| 3 <!-- | |
| 4 Copyright (c) 2010 The Chromium Authors. All rights reserved. | |
| 5 Use of this source code is governed by a BSD-style license that can be | |
| 6 found in the LICENSE file. | |
| 7 --> | |
| 8 <head> | |
| 9 <title></title> | |
| 10 <script src="http://closure-library.googlecode.com/svn/trunk/closure/goog/base.j s"></script> | |
| 11 <script src="../shared/js/cr.js"></script> | |
| 12 <script src="../shared/js/cr/event_target.js"></script> | |
| 13 <script src="timeline_model.js"></script> | |
| 14 <script> | |
| 15 goog.require('goog.testing.jsunit'); | |
| 16 </script> | |
| 17 | |
| 18 </head> | |
| 19 <body> | |
| 20 <script> | |
| 21 function testBasicSingleThreadNonnestedParsing() { | |
| 22 var events = [ | |
| 23 {'name':'a','args':{},'pid':52,'ts':9524,'cat':'foo','tid':53,'ph':'B'}, | |
|
arv (Not doing code reviews)
2011/10/21 17:09:18
space after :
nduca
2011/10/21 19:50:40
Done.
| |
| 24 {'name':'a','args':{},'pid':52,'ts':9560,'cat':'foo','tid':53,'ph':'E'}, | |
| 25 {'name':'b','args':{},'pid':52,'ts':9629,'cat':'foo','tid':53,'ph':'B'}, | |
| 26 {'name':'b','args':{},'pid':52,'ts':9631,'cat':'foo','tid':53,'ph':'E'} | |
| 27 ]; | |
| 28 var m = new tracing.TimelineModel(events); | |
| 29 assertEquals(1, m.numProcesses); | |
| 30 var p = m.processes[52]; | |
| 31 assertNotUndefined(p); | |
| 32 | |
| 33 assertEquals(1, p.numThreads); | |
| 34 var t = p.threads[53]; | |
| 35 assertNotUndefined(t); | |
| 36 assertEquals(1, t.subRows.length); | |
| 37 assertEquals(53, t.tid); | |
| 38 var subRow = t.subRows[0]; | |
| 39 assertEquals(2, subRow.length); | |
| 40 var slice = subRow[0]; | |
| 41 assertEquals('a', slice.title); | |
| 42 assertEquals(0, slice.start); | |
| 43 assertEquals((9560 - 9524) / 1000, slice.duration); | |
| 44 assertEquals(0, slice.subSlices.length); | |
| 45 | |
| 46 slice = subRow[1]; | |
| 47 assertEquals('b', slice.title); | |
| 48 assertEquals((9629-9524) / 1000, slice.start); | |
| 49 assertEquals((9631 - 9629) / 1000, slice.duration); | |
| 50 assertEquals(0, slice.subSlices.length); | |
| 51 } | |
| 52 | |
| 53 function testNestedParsing() { | |
| 54 var events = [ | |
| 55 {'name':'a','args':{},'pid':1,'ts':1,'cat':'foo','tid':1,'ph':'B'}, | |
| 56 {'name':'b','args':{},'pid':1,'ts':2,'cat':'foo','tid':1,'ph':'B'}, | |
| 57 {'name':'b','args':{},'pid':1,'ts':3,'cat':'foo','tid':1,'ph':'E'}, | |
| 58 {'name':'a','args':{},'pid':1,'ts':4,'cat':'foo','tid':1,'ph':'E'}, | |
| 59 ]; | |
| 60 var m = new tracing.TimelineModel(events); | |
| 61 var p = m.processes[1]; | |
| 62 var t = p.threads[1]; | |
| 63 assertEquals(2, t.subRows.length); | |
| 64 var subRow = t.subRows[0]; | |
| 65 assertEquals(1, subRow.length); | |
| 66 var slice = subRow[0]; | |
| 67 assertEquals('a', slice.title); | |
| 68 assertEquals((4-1) / 1000, slice.duration); | |
|
arv (Not doing code reviews)
2011/10/21 17:09:18
whitespace
nduca
2011/10/21 19:50:40
Done.
| |
| 69 assertEquals(1, slice.subSlices.length); | |
| 70 | |
| 71 slice = slice.subSlices[0]; | |
| 72 assertEquals('b', slice.title); | |
| 73 assertEquals((2-1) / 1000, slice.start); | |
| 74 assertEquals((3-2) / 1000, slice.duration); | |
| 75 assertEquals(0, slice.subSlices.length); | |
| 76 | |
| 77 subRow = t.subRows[1]; | |
| 78 slice = subRow[0]; | |
| 79 assertEquals(t.subRows[0][0].subSlices[0], slice); | |
| 80 } | |
| 81 | |
| 82 function testAutoclosing() { | |
| 83 var events = [ | |
| 84 // Slice that doesn't finish | |
| 85 {'name':'a','args':{},'pid':1,'ts':1,'cat':'foo','tid':1,'ph':'B'}, | |
| 86 | |
| 87 // Slice that does finish to give an 'end time' to make autoclosing work | |
| 88 {'name':'b','args':{},'pid':1,'ts':1,'cat':'foo','tid':2,'ph':'B'}, | |
| 89 {'name':'b','args':{},'pid':1,'ts':2,'cat':'foo','tid':2,'ph':'E'}, | |
| 90 ]; | |
| 91 var m = new tracing.TimelineModel(events); | |
| 92 var p = m.processes[1]; | |
| 93 var t = p.threads[1]; | |
| 94 var subRow = t.subRows[0]; | |
| 95 var slice = subRow[0]; | |
| 96 assertEquals('a', slice.title); | |
| 97 assertTrue(slice.didNotFinish); | |
| 98 assertEquals(0, slice.start); | |
| 99 assertEquals((2-1) / 1000, slice.duration); | |
| 100 } | |
| 101 | |
| 102 | |
| 103 function testNestedAutoclosing() { | |
| 104 var events = [ | |
| 105 // Tasks that dont finish | |
| 106 {'name':'a1','args':{},'pid':1,'ts':1,'cat':'foo','tid':1,'ph':'B'}, | |
| 107 {'name':'a2','args':{},'pid':1,'ts':1.5,'cat':'foo','tid':1,'ph':'B'}, | |
| 108 | |
| 109 // Slice that does finish to give an 'end time' to make autoclosing work | |
| 110 {'name':'b','args':{},'pid':1,'ts':1,'cat':'foo','tid':2,'ph':'B'}, | |
| 111 {'name':'b','args':{},'pid':1,'ts':2,'cat':'foo','tid':2,'ph':'E'}, | |
| 112 ]; | |
| 113 var m = new tracing.TimelineModel(events); | |
| 114 var p = m.processes[1]; | |
| 115 var t = p.threads[1]; | |
| 116 var subRow = t.subRows[0]; | |
| 117 var slice = subRow[0]; | |
| 118 assertEquals('a1', slice.title); | |
| 119 assertTrue(slice.didNotFinish); | |
| 120 assertEquals(0, slice.start); | |
| 121 assertEquals((2-1) / 1000, slice.duration); | |
| 122 | |
| 123 var slice = slice.subSlices[0]; | |
| 124 assertEquals('a2', slice.title); | |
| 125 assertTrue(slice.didNotFinish); | |
| 126 assertEquals((1.5-1) / 1000, slice.start); | |
| 127 assertEquals((2-1.5) / 1000, slice.duration); | |
| 128 } | |
| 129 | |
| 130 function testTaskColoring() { | |
| 131 // The test below depends on hashing of 'a' != 'b'. Fail early if that assumpt ion is incorrect. | |
| 132 assertNotEquals(tracing.getStringHash('a'), tracing.getStringHash('b')); | |
| 133 | |
| 134 var events = [ | |
| 135 {'name':'a','args':{},'pid':1,'ts':1,'cat':'foo','tid':1,'ph':'B'}, | |
| 136 {'name':'a','args':{},'pid':1,'ts':2,'cat':'foo','tid':1,'ph':'E'}, | |
| 137 {'name':'b','args':{},'pid':1,'ts':3,'cat':'foo','tid':1,'ph':'B'}, | |
| 138 {'name':'b','args':{},'pid':1,'ts':4,'cat':'foo','tid':1,'ph':'E'}, | |
| 139 {'name':'a','args':{},'pid':1,'ts':5,'cat':'foo','tid':1,'ph':'B'}, | |
| 140 {'name':'a','args':{},'pid':1,'ts':6,'cat':'foo','tid':1,'ph':'E'}, | |
| 141 ]; | |
| 142 var m = new tracing.TimelineModel(events); | |
| 143 var p = m.processes[1]; | |
| 144 var t = p.threads[1]; | |
| 145 var subRow = t.subRows[0]; | |
| 146 var a1 = subRow[0]; | |
| 147 assertEquals('a', a1.title); | |
| 148 var b = subRow[1]; | |
| 149 assertEquals('b', b.title); | |
| 150 assertNotEquals(a1.colorId, b.colorId); | |
| 151 var a2 = subRow[0]; | |
| 152 assertEquals('a', a2.title); | |
| 153 assertEquals(a1.colorId, a2.colorId); | |
| 154 } | |
| 155 | |
| 156 function testMultipleThreadParsing() { | |
| 157 var events = [ | |
| 158 {'name':'a','args':{},'pid':1,'ts':1,'cat':'foo','tid':1,'ph':'B'}, | |
| 159 {'name':'a','args':{},'pid':1,'ts':2,'cat':'foo','tid':1,'ph':'E'}, | |
| 160 {'name':'b','args':{},'pid':1,'ts':3,'cat':'foo','tid':2,'ph':'B'}, | |
| 161 {'name':'b','args':{},'pid':1,'ts':4,'cat':'foo','tid':2,'ph':'E'} | |
| 162 ]; | |
| 163 var m = new tracing.TimelineModel(events); | |
| 164 assertEquals(1, m.numProcesses); | |
| 165 var p = m.processes[1]; | |
| 166 assertNotUndefined(p); | |
| 167 | |
| 168 assertEquals(2, p.numThreads); | |
| 169 | |
| 170 // Check thread 1 | |
| 171 var t = p.threads[1]; | |
| 172 assertNotUndefined(t); | |
| 173 assertEquals(1, t.subRows.length); | |
| 174 assertEquals(1, t.tid); | |
| 175 | |
| 176 var subRow = t.subRows[0]; | |
| 177 assertEquals(1, subRow.length); | |
| 178 var slice = subRow[0]; | |
| 179 assertEquals('a', slice.title); | |
| 180 assertEquals(0, slice.start); | |
| 181 assertEquals((2-1) / 1000, slice.duration); | |
| 182 assertEquals(0, slice.subSlices.length); | |
| 183 | |
| 184 // Check thread 2 | |
| 185 var t = p.threads[2]; | |
| 186 assertNotUndefined(t); | |
| 187 assertEquals(1, t.subRows.length); | |
| 188 assertEquals(2, t.tid); | |
| 189 | |
| 190 subRow = t.subRows[0]; | |
| 191 assertEquals(1, subRow.length); | |
| 192 slice = subRow[0]; | |
| 193 assertEquals('b', slice.title); | |
| 194 assertEquals((3-1) / 1000, slice.start); | |
| 195 assertEquals((4 - 3) / 1000, slice.duration); | |
| 196 assertEquals(0, slice.subSlices.length); | |
| 197 } | |
| 198 | |
| 199 function testMultiplePidParsing() { | |
| 200 var events = [ | |
| 201 {'name':'a','args':{},'pid':1,'ts':1,'cat':'foo','tid':1,'ph':'B'}, | |
| 202 {'name':'a','args':{},'pid':1,'ts':2,'cat':'foo','tid':1,'ph':'E'}, | |
| 203 {'name':'b','args':{},'pid':2,'ts':3,'cat':'foo','tid':2,'ph':'B'}, | |
| 204 {'name':'b','args':{},'pid':2,'ts':4,'cat':'foo','tid':2,'ph':'E'} | |
| 205 ]; | |
| 206 var m = new tracing.TimelineModel(events); | |
| 207 assertEquals(2, m.numProcesses); | |
| 208 var p = m.processes[1]; | |
| 209 assertNotUndefined(p); | |
| 210 | |
| 211 assertEquals(1, p.numThreads); | |
| 212 | |
| 213 // Check process 1 thread 1 | |
| 214 var t = p.threads[1]; | |
| 215 assertNotUndefined(t); | |
| 216 assertEquals(1, t.subRows.length); | |
| 217 assertEquals(1, t.tid); | |
| 218 | |
| 219 var subRow = t.subRows[0]; | |
| 220 assertEquals(1, subRow.length); | |
| 221 var slice = subRow[0]; | |
| 222 assertEquals('a', slice.title); | |
| 223 assertEquals(0, slice.start); | |
| 224 assertEquals((2-1) / 1000, slice.duration); | |
| 225 assertEquals(0, slice.subSlices.length); | |
| 226 | |
| 227 // Check process 2 thread 2 | |
| 228 var p = m.processes[2]; | |
| 229 assertNotUndefined(p); | |
| 230 assertEquals(1, p.numThreads); | |
| 231 var t = p.threads[2]; | |
| 232 assertNotUndefined(t); | |
| 233 assertEquals(1, t.subRows.length); | |
| 234 assertEquals(2, t.tid); | |
| 235 | |
| 236 subRow = t.subRows[0]; | |
| 237 assertEquals(1, subRow.length); | |
| 238 slice = subRow[0]; | |
| 239 assertEquals('b', slice.title); | |
| 240 assertEquals((3-1) / 1000, slice.start); | |
| 241 assertEquals((4 - 3) / 1000, slice.duration); | |
| 242 assertEquals(0, slice.subSlices.length); | |
| 243 | |
| 244 // Check getAllThreads. | |
| 245 assertArrayEquals([m.processes[1].threads[1], m.processes[2].threads[2]], | |
| 246 m.getAllThreads()) | |
| 247 } | |
| 248 | |
| 249 // Thread names | |
| 250 function testThreadNames() { | |
| 251 var events = [ | |
| 252 {'name': 'thread_name', args: {'name': 'Thread 1'}, 'pid': 1, 'ts': 0, 'tid' : 1, 'ph': 'M'}, | |
| 253 {'name':'a','args':{},'pid':1,'ts':1,'cat':'foo','tid':1,'ph':'B'}, | |
| 254 {'name':'a','args':{},'pid':1,'ts':2,'cat':'foo','tid':1,'ph':'E'}, | |
| 255 {'name':'b','args':{},'pid':2,'ts':3,'cat':'foo','tid':2,'ph':'B'}, | |
| 256 {'name':'b','args':{},'pid':2,'ts':4,'cat':'foo','tid':2,'ph':'E'}, | |
| 257 {'name': 'thread_name', args: {'name': 'Thread 2'}, 'pid': 2, 'ts': 0, 'tid' : 2, 'ph': 'M'}, | |
| 258 ]; | |
| 259 var m = new tracing.TimelineModel(events); | |
| 260 assertEquals('Thread 1', m.processes[1].threads[1].name); | |
| 261 assertEquals('Thread 2', m.processes[2].threads[2].name); | |
| 262 } | |
| 263 | |
| 264 | |
| 265 function testImmediateParsing() { | |
| 266 var events = [ | |
| 267 // Need to include immediates inside a task so the timeline | |
| 268 // recentering/zeroing doesn't clobber their timestamp. | |
| 269 {'name':'a','args':{},'pid':1,'ts':1,'cat':'foo','tid':1,'ph':'B'}, | |
| 270 {'name':'immediate','args':{},'pid':1,'ts':2,'cat':'foo','tid':1,'ph':'I'}, | |
| 271 {'name':'a','args':{},'pid':1,'ts':4,'cat':'foo','tid':1,'ph':'E'}, | |
| 272 ]; | |
| 273 var m = new tracing.TimelineModel(events); | |
| 274 var p = m.processes[1]; | |
| 275 var t = p.threads[1]; | |
| 276 assertEquals(2, t.subRows.length); | |
| 277 var subRow = t.subRows[0]; | |
| 278 assertEquals(1, subRow.length); | |
| 279 var slice = subRow[0]; | |
| 280 assertEquals('a', slice.title); | |
| 281 assertEquals((4-1) / 1000, slice.duration); | |
| 282 assertEquals(1, slice.subSlices.length); | |
| 283 | |
| 284 var immed = slice.subSlices[0]; | |
| 285 assertEquals('immediate', immed.title); | |
| 286 assertEquals((2-1) / 1000, immed.start); | |
| 287 assertEquals(0, immed.duration); | |
| 288 assertEquals(0, immed.subSlices.length); | |
| 289 | |
| 290 subRow = t.subRows[1]; | |
| 291 assertEquals(immed, subRow[0]); | |
| 292 } | |
| 293 </script> | |
| 294 </body> | |
| 295 </html> | |
| OLD | NEW |