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

Side by Side Diff: cc/debug/frame_timing_tracker_unittest.cc

Issue 914403003: cc: Add main frame timing info to frame timing tracker. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: rebase Created 5 years, 8 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
« no previous file with comments | « cc/debug/frame_timing_tracker.cc ('k') | cc/layers/layer_impl.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include <set>
5 #include <string> 6 #include <string>
6 7
7 #include "base/time/time.h" 8 #include "base/time/time.h"
8 #include "base/trace_event/trace_event_argument.h" 9 #include "base/trace_event/trace_event_argument.h"
9 #include "base/values.h" 10 #include "base/values.h"
10 #include "cc/debug/frame_timing_tracker.h" 11 #include "cc/debug/frame_timing_tracker.h"
11 #include "testing/gtest/include/gtest/gtest.h" 12 #include "testing/gtest/include/gtest/gtest.h"
12 13
13 namespace cc { 14 namespace cc {
14 namespace { 15 namespace {
15 16
16 static std::string ToString( 17 std::string CompositeToString(
17 scoped_ptr<FrameTimingTracker::CompositeTimingSet> timingset) { 18 scoped_ptr<FrameTimingTracker::CompositeTimingSet> timingset) {
18 scoped_refptr<base::trace_event::TracedValue> value = 19 scoped_refptr<base::trace_event::TracedValue> value =
19 new base::trace_event::TracedValue(); 20 new base::trace_event::TracedValue();
20 value->BeginArray("values"); 21 value->BeginArray("values");
21 for (const auto& it : *timingset) { 22 std::set<int> rect_ids;
23 for (const auto& pair : *timingset)
24 rect_ids.insert(pair.first);
25
26 for (const auto& rect_id : rect_ids) {
27 auto& events = (*timingset)[rect_id];
22 value->BeginDictionary(); 28 value->BeginDictionary();
23 value->SetInteger("rect_id", it.first); 29 value->SetInteger("rect_id", rect_id);
24 value->BeginArray("events"); 30 value->BeginArray("events");
25 for (const auto& event : it.second) { 31 for (const auto& event : events) {
26 value->BeginDictionary(); 32 value->BeginDictionary();
27 value->SetInteger("frame_id", event.frame_id); 33 value->SetInteger("frame_id", event.frame_id);
28 value->SetInteger("timestamp", event.timestamp.ToInternalValue()); 34 value->SetInteger("timestamp", event.timestamp.ToInternalValue());
29 value->EndDictionary(); 35 value->EndDictionary();
36 }
37 value->EndArray();
38 value->EndDictionary();
39 }
40 value->EndArray();
41 return value->ToString();
42 }
43
44 std::string MainFrameToString(
45 scoped_ptr<FrameTimingTracker::MainFrameTimingSet> timingset) {
46 scoped_refptr<base::trace_event::TracedValue> value =
47 new base::trace_event::TracedValue();
48 value->BeginArray("values");
49 std::set<int> rect_ids;
50 for (const auto& pair : *timingset)
51 rect_ids.insert(pair.first);
52
53 for (const auto& rect_id : rect_ids) {
54 auto& events = (*timingset)[rect_id];
55 value->BeginDictionary();
56 value->SetInteger("rect_id", rect_id);
57 value->BeginArray("events");
58 for (const auto& event : events) {
59 value->BeginDictionary();
60 value->SetInteger("end_time", event.end_time.ToInternalValue());
61 value->SetInteger("frame_id", event.frame_id);
62 value->SetInteger("timestamp", event.timestamp.ToInternalValue());
63 value->EndDictionary();
30 } 64 }
31 value->EndArray(); 65 value->EndArray();
32 value->EndDictionary(); 66 value->EndDictionary();
33 } 67 }
34 value->EndArray(); 68 value->EndArray();
35 return value->ToString(); 69 return value->ToString();
36 } 70 }
37 71
38 TEST(FrameTimingTrackerTest, DefaultTrackerIsEmpty) { 72 TEST(FrameTimingTrackerTest, DefaultTrackerIsEmpty) {
39 scoped_ptr<FrameTimingTracker> tracker(FrameTimingTracker::Create()); 73 scoped_ptr<FrameTimingTracker> tracker(FrameTimingTracker::Create());
40 EXPECT_EQ("{\"values\":[]}", ToString(tracker->GroupCountsByRectId())); 74 EXPECT_EQ("{\"values\":[]}",
75 CompositeToString(tracker->GroupCompositeCountsByRectId()));
76 EXPECT_EQ("{\"values\":[]}",
77 MainFrameToString(tracker->GroupMainFrameCountsByRectId()));
41 } 78 }
42 79
43 TEST(FrameTimingTrackerTest, NoFrameIdsIsEmpty) { 80 TEST(FrameTimingTrackerTest, NoFrameIdsIsEmpty) {
44 scoped_ptr<FrameTimingTracker> tracker(FrameTimingTracker::Create()); 81 scoped_ptr<FrameTimingTracker> tracker(FrameTimingTracker::Create());
45 std::vector<std::pair<int, int64_t>> ids; 82 std::vector<std::pair<int, int64_t>> ids;
46 tracker->SaveTimeStamps(base::TimeTicks::FromInternalValue(100), ids); 83 tracker->SaveTimeStamps(base::TimeTicks::FromInternalValue(100), ids);
47 EXPECT_EQ("{\"values\":[]}", ToString(tracker->GroupCountsByRectId())); 84 EXPECT_EQ("{\"values\":[]}",
85 CompositeToString(tracker->GroupCompositeCountsByRectId()));
86 }
87
88 TEST(FrameTimingTrackerTest, NoRectIdsYieldsNoMainFrameEvents) {
89 scoped_ptr<FrameTimingTracker> tracker(FrameTimingTracker::Create());
90 tracker->SaveMainFrameTimeStamps(std::vector<int64_t>(),
91 base::TimeTicks::FromInternalValue(100),
92 base::TimeTicks::FromInternalValue(110), 1);
93 EXPECT_EQ("{\"values\":[]}",
94 MainFrameToString(tracker->GroupMainFrameCountsByRectId()));
48 } 95 }
49 96
50 TEST(FrameTimingTrackerTest, OneFrameId) { 97 TEST(FrameTimingTrackerTest, OneFrameId) {
51 scoped_ptr<FrameTimingTracker> tracker(FrameTimingTracker::Create()); 98 scoped_ptr<FrameTimingTracker> tracker(FrameTimingTracker::Create());
52 std::vector<std::pair<int, int64_t>> ids; 99 std::vector<std::pair<int, int64_t>> ids;
53 ids.push_back(std::make_pair(1, 2)); 100 ids.push_back(std::make_pair(1, 2));
54 tracker->SaveTimeStamps(base::TimeTicks::FromInternalValue(100), ids); 101 tracker->SaveTimeStamps(base::TimeTicks::FromInternalValue(100), ids);
55 EXPECT_EQ( 102 EXPECT_EQ(
56 "{\"values\":[{\"events\":[" 103 "{\"values\":[{\"events\":["
57 "{\"frame_id\":1,\"timestamp\":100}],\"rect_id\":2}]}", 104 "{\"frame_id\":1,\"timestamp\":100}],\"rect_id\":2}]}",
58 ToString(tracker->GroupCountsByRectId())); 105 CompositeToString(tracker->GroupCompositeCountsByRectId()));
106 }
107
108 TEST(FrameTimingTrackerTest, OneMainFrameRect) {
109 scoped_ptr<FrameTimingTracker> tracker(FrameTimingTracker::Create());
110 std::vector<int64_t> rect_ids;
111 rect_ids.push_back(1);
112 tracker->SaveMainFrameTimeStamps(rect_ids,
113 base::TimeTicks::FromInternalValue(100),
114 base::TimeTicks::FromInternalValue(110), 2);
115 EXPECT_EQ(
116 "{\"values\":[{\"events\":["
117 "{\"end_time\":110,\"frame_id\":2,\"timestamp\":100}],\"rect_id\":1}]}",
118 MainFrameToString(tracker->GroupMainFrameCountsByRectId()));
59 } 119 }
60 120
61 TEST(FrameTimingTrackerTest, UnsortedTimestampsIds) { 121 TEST(FrameTimingTrackerTest, UnsortedTimestampsIds) {
62 scoped_ptr<FrameTimingTracker> tracker(FrameTimingTracker::Create()); 122 scoped_ptr<FrameTimingTracker> tracker(FrameTimingTracker::Create());
63 std::vector<std::pair<int, int64_t>> ids; 123 std::vector<std::pair<int, int64_t>> ids;
64 ids.push_back(std::make_pair(1, 2)); 124 ids.push_back(std::make_pair(1, 2));
65 tracker->SaveTimeStamps(base::TimeTicks::FromInternalValue(200), ids); 125 tracker->SaveTimeStamps(base::TimeTicks::FromInternalValue(200), ids);
66 tracker->SaveTimeStamps(base::TimeTicks::FromInternalValue(400), ids); 126 tracker->SaveTimeStamps(base::TimeTicks::FromInternalValue(400), ids);
67 tracker->SaveTimeStamps(base::TimeTicks::FromInternalValue(100), ids); 127 tracker->SaveTimeStamps(base::TimeTicks::FromInternalValue(100), ids);
68 EXPECT_EQ( 128 EXPECT_EQ(
69 "{\"values\":[{\"events\":[" 129 "{\"values\":[{\"events\":["
70 "{\"frame_id\":1,\"timestamp\":100}," 130 "{\"frame_id\":1,\"timestamp\":100},"
71 "{\"frame_id\":1,\"timestamp\":200}," 131 "{\"frame_id\":1,\"timestamp\":200},"
72 "{\"frame_id\":1,\"timestamp\":400}],\"rect_id\":2}]}", 132 "{\"frame_id\":1,\"timestamp\":400}],\"rect_id\":2}]}",
73 ToString(tracker->GroupCountsByRectId())); 133 CompositeToString(tracker->GroupCompositeCountsByRectId()));
134 }
135
136 TEST(FrameTimingTrackerTest, MainFrameUnsortedTimestamps) {
137 scoped_ptr<FrameTimingTracker> tracker(FrameTimingTracker::Create());
138 std::vector<int64_t> rect_ids;
139 rect_ids.push_back(2);
140 tracker->SaveMainFrameTimeStamps(rect_ids,
141 base::TimeTicks::FromInternalValue(200),
142 base::TimeTicks::FromInternalValue(280), 1);
143 tracker->SaveMainFrameTimeStamps(rect_ids,
144 base::TimeTicks::FromInternalValue(400),
145 base::TimeTicks::FromInternalValue(470), 1);
146 tracker->SaveMainFrameTimeStamps(rect_ids,
147 base::TimeTicks::FromInternalValue(100),
148 base::TimeTicks::FromInternalValue(160), 1);
149 EXPECT_EQ(
150 "{\"values\":[{\"events\":["
151 "{\"end_time\":160,\"frame_id\":1,\"timestamp\":100},"
152 "{\"end_time\":280,\"frame_id\":1,\"timestamp\":200},"
153 "{\"end_time\":470,\"frame_id\":1,\"timestamp\":400}],\"rect_id\":2}]}",
154 MainFrameToString(tracker->GroupMainFrameCountsByRectId()));
74 } 155 }
75 156
76 TEST(FrameTimingTrackerTest, MultipleFrameIds) { 157 TEST(FrameTimingTrackerTest, MultipleFrameIds) {
77 scoped_ptr<FrameTimingTracker> tracker(FrameTimingTracker::Create()); 158 scoped_ptr<FrameTimingTracker> tracker(FrameTimingTracker::Create());
78 159
79 std::vector<std::pair<int, int64_t>> ids200; 160 std::vector<std::pair<int, int64_t>> ids200;
80 ids200.push_back(std::make_pair(1, 2)); 161 ids200.push_back(std::make_pair(1, 2));
81 ids200.push_back(std::make_pair(1, 3)); 162 ids200.push_back(std::make_pair(1, 3));
82 tracker->SaveTimeStamps(base::TimeTicks::FromInternalValue(200), ids200); 163 tracker->SaveTimeStamps(base::TimeTicks::FromInternalValue(200), ids200);
83 164
84 std::vector<std::pair<int, int64_t>> ids400; 165 std::vector<std::pair<int, int64_t>> ids400;
85 ids400.push_back(std::make_pair(2, 2)); 166 ids400.push_back(std::make_pair(2, 2));
86 tracker->SaveTimeStamps(base::TimeTicks::FromInternalValue(400), ids400); 167 tracker->SaveTimeStamps(base::TimeTicks::FromInternalValue(400), ids400);
87 168
88 std::vector<std::pair<int, int64_t>> ids100; 169 std::vector<std::pair<int, int64_t>> ids100;
89 ids100.push_back(std::make_pair(3, 2)); 170 ids100.push_back(std::make_pair(3, 2));
90 ids100.push_back(std::make_pair(2, 3)); 171 ids100.push_back(std::make_pair(2, 3));
91 ids100.push_back(std::make_pair(3, 4)); 172 ids100.push_back(std::make_pair(3, 4));
92 tracker->SaveTimeStamps(base::TimeTicks::FromInternalValue(100), ids100); 173 tracker->SaveTimeStamps(base::TimeTicks::FromInternalValue(100), ids100);
93 174
94 std::string result = ToString(tracker->GroupCountsByRectId()); 175 EXPECT_EQ(
176 "{\"values\":[{\"events\":["
177 "{\"frame_id\":3,\"timestamp\":100},"
178 "{\"frame_id\":1,\"timestamp\":200},"
179 "{\"frame_id\":2,\"timestamp\":400}],\"rect_id\":2},"
180 "{\"events\":["
181 "{\"frame_id\":2,\"timestamp\":100},"
182 "{\"frame_id\":1,\"timestamp\":200}],\"rect_id\":3},"
183 "{\"events\":["
184 "{\"frame_id\":3,\"timestamp\":100}],\"rect_id\":4}"
185 "]}",
186 CompositeToString(tracker->GroupCompositeCountsByRectId()));
187 }
95 188
96 EXPECT_EQ(strlen( 189 TEST(FrameTimingTrackerTest, MultipleMainFrameEvents) {
97 "{\"values\":[{\"events\":[" 190 scoped_ptr<FrameTimingTracker> tracker(FrameTimingTracker::Create());
98 "{\"frame_id\":3,\"timestamp\":100}," 191
99 "{\"frame_id\":1,\"timestamp\":200}," 192 std::vector<int64_t> rect_ids200;
100 "{\"frame_id\":2,\"timestamp\":400}],\"rect_id\":2}," 193 rect_ids200.push_back(2);
101 "{\"events\":[" 194 rect_ids200.push_back(3);
102 "{\"frame_id\":2,\"timestamp\":100}," 195 tracker->SaveMainFrameTimeStamps(rect_ids200,
103 "{\"frame_id\":1,\"timestamp\":200}],\"rect_id\":3}," 196 base::TimeTicks::FromInternalValue(200),
104 "{\"events\":[" 197 base::TimeTicks::FromInternalValue(220), 1);
105 "{\"frame_id\":3,\"timestamp\":100}],\"rect_id\":4}" 198
106 "]}"), 199 std::vector<int64_t> rect_ids400;
107 result.size()); 200 rect_ids400.push_back(2);
108 EXPECT_NE(std::string::npos, 201 tracker->SaveMainFrameTimeStamps(rect_ids400,
109 result.find( 202 base::TimeTicks::FromInternalValue(400),
110 "{\"frame_id\":3,\"timestamp\":100}," 203 base::TimeTicks::FromInternalValue(440), 2);
111 "{\"frame_id\":1,\"timestamp\":200}," 204
112 "{\"frame_id\":2,\"timestamp\":400}],\"rect_id\":2}")); 205 std::vector<int64_t> rect_ids100;
113 EXPECT_NE(std::string::npos, 206 rect_ids100.push_back(2);
114 result.find( 207 rect_ids100.push_back(3);
115 "{\"events\":[" 208 rect_ids100.push_back(4);
116 "{\"frame_id\":2,\"timestamp\":100}," 209 tracker->SaveMainFrameTimeStamps(rect_ids100,
117 "{\"frame_id\":1,\"timestamp\":200}],\"rect_id\":3}")); 210 base::TimeTicks::FromInternalValue(100),
118 EXPECT_NE(std::string::npos, 211 base::TimeTicks::FromInternalValue(110), 3);
119 result.find( 212
120 "{\"events\":[" 213 EXPECT_EQ(
121 "{\"frame_id\":3,\"timestamp\":100}],\"rect_id\":4}")); 214 "{\"values\":[{\"events\":["
215 "{\"end_time\":110,\"frame_id\":3,\"timestamp\":100},"
216 "{\"end_time\":220,\"frame_id\":1,\"timestamp\":200},"
217 "{\"end_time\":440,\"frame_id\":2,\"timestamp\":400}],\"rect_id\":2},"
218 "{\"events\":["
219 "{\"end_time\":110,\"frame_id\":3,\"timestamp\":100},"
220 "{\"end_time\":220,\"frame_id\":1,\"timestamp\":200}],\"rect_id\":3},"
221 "{\"events\":["
222 "{\"end_time\":110,\"frame_id\":3,\"timestamp\":100}],\"rect_id\":4}"
223 "]}",
224 MainFrameToString(tracker->GroupMainFrameCountsByRectId()));
122 } 225 }
123 226
124 } // namespace 227 } // namespace
125 } // namespace cc 228 } // namespace cc
OLDNEW
« no previous file with comments | « cc/debug/frame_timing_tracker.cc ('k') | cc/layers/layer_impl.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698