OLD | NEW |
| (Empty) |
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 | |
3 // found in the LICENSE file. | |
4 | |
5 #include <string> | |
6 | |
7 #include "base/time/time.h" | |
8 #include "base/trace_event/trace_event_argument.h" | |
9 #include "base/values.h" | |
10 #include "cc/debug/frame_timing_tracker.h" | |
11 #include "testing/gtest/include/gtest/gtest.h" | |
12 | |
13 namespace cc { | |
14 namespace { | |
15 | |
16 static std::string ToString( | |
17 scoped_ptr<FrameTimingTracker::CompositeTimingSet> timingset) { | |
18 scoped_refptr<base::trace_event::TracedValue> value = | |
19 new base::trace_event::TracedValue(); | |
20 value->BeginArray("values"); | |
21 for (const auto& it : *timingset) { | |
22 value->BeginDictionary(); | |
23 value->SetInteger("rect_id", it.first); | |
24 value->BeginArray("events"); | |
25 for (const auto& event : it.second) { | |
26 value->BeginDictionary(); | |
27 value->SetInteger("frame_id", event.frame_id); | |
28 value->SetInteger("timestamp", event.timestamp.ToInternalValue()); | |
29 value->EndDictionary(); | |
30 } | |
31 value->EndArray(); | |
32 value->EndDictionary(); | |
33 } | |
34 value->EndArray(); | |
35 return value->ToString(); | |
36 } | |
37 | |
38 TEST(FrameTimingTrackerTest, DefaultTrackerIsEmpty) { | |
39 scoped_ptr<FrameTimingTracker> tracker(FrameTimingTracker::Create()); | |
40 EXPECT_EQ("{\"values\":[]}", ToString(tracker->GroupCountsByRectId())); | |
41 } | |
42 | |
43 TEST(FrameTimingTrackerTest, NoFrameIdsIsEmpty) { | |
44 scoped_ptr<FrameTimingTracker> tracker(FrameTimingTracker::Create()); | |
45 std::vector<std::pair<int, int64_t>> ids; | |
46 tracker->SaveTimeStamps(base::TimeTicks::FromInternalValue(100), ids); | |
47 EXPECT_EQ("{\"values\":[]}", ToString(tracker->GroupCountsByRectId())); | |
48 } | |
49 | |
50 TEST(FrameTimingTrackerTest, OneFrameId) { | |
51 scoped_ptr<FrameTimingTracker> tracker(FrameTimingTracker::Create()); | |
52 std::vector<std::pair<int, int64_t>> ids; | |
53 ids.push_back(std::make_pair(1, 2)); | |
54 tracker->SaveTimeStamps(base::TimeTicks::FromInternalValue(100), ids); | |
55 EXPECT_EQ( | |
56 "{\"values\":[{\"events\":[" | |
57 "{\"frame_id\":1,\"timestamp\":100}],\"rect_id\":2}]}", | |
58 ToString(tracker->GroupCountsByRectId())); | |
59 } | |
60 | |
61 TEST(FrameTimingTrackerTest, UnsortedTimestampsIds) { | |
62 scoped_ptr<FrameTimingTracker> tracker(FrameTimingTracker::Create()); | |
63 std::vector<std::pair<int, int64_t>> ids; | |
64 ids.push_back(std::make_pair(1, 2)); | |
65 tracker->SaveTimeStamps(base::TimeTicks::FromInternalValue(200), ids); | |
66 tracker->SaveTimeStamps(base::TimeTicks::FromInternalValue(400), ids); | |
67 tracker->SaveTimeStamps(base::TimeTicks::FromInternalValue(100), ids); | |
68 EXPECT_EQ( | |
69 "{\"values\":[{\"events\":[" | |
70 "{\"frame_id\":1,\"timestamp\":100}," | |
71 "{\"frame_id\":1,\"timestamp\":200}," | |
72 "{\"frame_id\":1,\"timestamp\":400}],\"rect_id\":2}]}", | |
73 ToString(tracker->GroupCountsByRectId())); | |
74 } | |
75 | |
76 TEST(FrameTimingTrackerTest, MultipleFrameIds) { | |
77 scoped_ptr<FrameTimingTracker> tracker(FrameTimingTracker::Create()); | |
78 | |
79 std::vector<std::pair<int, int64_t>> ids200; | |
80 ids200.push_back(std::make_pair(1, 2)); | |
81 ids200.push_back(std::make_pair(1, 3)); | |
82 tracker->SaveTimeStamps(base::TimeTicks::FromInternalValue(200), ids200); | |
83 | |
84 std::vector<std::pair<int, int64_t>> ids400; | |
85 ids400.push_back(std::make_pair(2, 2)); | |
86 tracker->SaveTimeStamps(base::TimeTicks::FromInternalValue(400), ids400); | |
87 | |
88 std::vector<std::pair<int, int64_t>> ids100; | |
89 ids100.push_back(std::make_pair(3, 2)); | |
90 ids100.push_back(std::make_pair(2, 3)); | |
91 ids100.push_back(std::make_pair(3, 4)); | |
92 tracker->SaveTimeStamps(base::TimeTicks::FromInternalValue(100), ids100); | |
93 | |
94 std::string result = ToString(tracker->GroupCountsByRectId()); | |
95 | |
96 EXPECT_EQ(strlen( | |
97 "{\"values\":[{\"events\":[" | |
98 "{\"frame_id\":3,\"timestamp\":100}," | |
99 "{\"frame_id\":1,\"timestamp\":200}," | |
100 "{\"frame_id\":2,\"timestamp\":400}],\"rect_id\":2}," | |
101 "{\"events\":[" | |
102 "{\"frame_id\":2,\"timestamp\":100}," | |
103 "{\"frame_id\":1,\"timestamp\":200}],\"rect_id\":3}," | |
104 "{\"events\":[" | |
105 "{\"frame_id\":3,\"timestamp\":100}],\"rect_id\":4}" | |
106 "]}"), | |
107 result.size()); | |
108 EXPECT_NE(std::string::npos, | |
109 result.find( | |
110 "{\"frame_id\":3,\"timestamp\":100}," | |
111 "{\"frame_id\":1,\"timestamp\":200}," | |
112 "{\"frame_id\":2,\"timestamp\":400}],\"rect_id\":2}")); | |
113 EXPECT_NE(std::string::npos, | |
114 result.find( | |
115 "{\"events\":[" | |
116 "{\"frame_id\":2,\"timestamp\":100}," | |
117 "{\"frame_id\":1,\"timestamp\":200}],\"rect_id\":3}")); | |
118 EXPECT_NE(std::string::npos, | |
119 result.find( | |
120 "{\"events\":[" | |
121 "{\"frame_id\":3,\"timestamp\":100}],\"rect_id\":4}")); | |
122 } | |
123 | |
124 } // namespace | |
125 } // namespace cc | |
OLD | NEW |