Index: cc/debug/frame_timing_tracker_unittest.cc |
diff --git a/cc/debug/frame_timing_tracker_unittest.cc b/cc/debug/frame_timing_tracker_unittest.cc |
index 85f571611ace7d527d7ec5f0d3e3126bd9a168e2..b5574435fbcfef1213ad22ff41bcfbaed883ff8a 100644 |
--- a/cc/debug/frame_timing_tracker_unittest.cc |
+++ b/cc/debug/frame_timing_tracker_unittest.cc |
@@ -2,6 +2,7 @@ |
// Use of this source code is governed by a BSD-style license that can be |
// found in the LICENSE file. |
+#include <set> |
#include <string> |
#include "base/time/time.h" |
@@ -13,17 +14,50 @@ |
namespace cc { |
namespace { |
-static std::string ToString( |
+std::string CompositeToString( |
scoped_ptr<FrameTimingTracker::CompositeTimingSet> timingset) { |
scoped_refptr<base::trace_event::TracedValue> value = |
new base::trace_event::TracedValue(); |
value->BeginArray("values"); |
- for (const auto& it : *timingset) { |
+ std::set<int> rect_ids; |
+ for (const auto& pair : *timingset) |
+ rect_ids.insert(pair.first); |
+ |
+ for (const auto& rect_id : rect_ids) { |
+ auto& events = (*timingset)[rect_id]; |
+ value->BeginDictionary(); |
+ value->SetInteger("rect_id", rect_id); |
+ value->BeginArray("events"); |
+ for (const auto& event : events) { |
+ value->BeginDictionary(); |
+ value->SetInteger("frame_id", event.frame_id); |
+ value->SetInteger("timestamp", event.timestamp.ToInternalValue()); |
+ value->EndDictionary(); |
+ } |
+ value->EndArray(); |
+ value->EndDictionary(); |
+ } |
+ value->EndArray(); |
+ return value->ToString(); |
+} |
+ |
+std::string MainFrameToString( |
+ scoped_ptr<FrameTimingTracker::MainFrameTimingSet> timingset) { |
+ scoped_refptr<base::trace_event::TracedValue> value = |
+ new base::trace_event::TracedValue(); |
+ value->BeginArray("values"); |
+ std::set<int> rect_ids; |
+ for (const auto& pair : *timingset) |
+ rect_ids.insert(pair.first); |
+ |
+ for (const auto& rect_id : rect_ids) { |
+ auto& events = (*timingset)[rect_id]; |
value->BeginDictionary(); |
- value->SetInteger("rect_id", it.first); |
+ value->SetInteger("rect_id", rect_id); |
value->BeginArray("events"); |
- for (const auto& event : it.second) { |
+ for (const auto& event : events) { |
value->BeginDictionary(); |
+ value->SetInteger("end_time", event.end_time.ToInternalValue()); |
value->SetInteger("frame_id", event.frame_id); |
value->SetInteger("timestamp", event.timestamp.ToInternalValue()); |
value->EndDictionary(); |
@@ -37,14 +71,27 @@ static std::string ToString( |
TEST(FrameTimingTrackerTest, DefaultTrackerIsEmpty) { |
scoped_ptr<FrameTimingTracker> tracker(FrameTimingTracker::Create()); |
- EXPECT_EQ("{\"values\":[]}", ToString(tracker->GroupCountsByRectId())); |
+ EXPECT_EQ("{\"values\":[]}", |
+ CompositeToString(tracker->GroupCompositeCountsByRectId())); |
+ EXPECT_EQ("{\"values\":[]}", |
+ MainFrameToString(tracker->GroupMainFrameCountsByRectId())); |
} |
TEST(FrameTimingTrackerTest, NoFrameIdsIsEmpty) { |
scoped_ptr<FrameTimingTracker> tracker(FrameTimingTracker::Create()); |
std::vector<std::pair<int, int64_t>> ids; |
tracker->SaveTimeStamps(base::TimeTicks::FromInternalValue(100), ids); |
- EXPECT_EQ("{\"values\":[]}", ToString(tracker->GroupCountsByRectId())); |
+ EXPECT_EQ("{\"values\":[]}", |
+ CompositeToString(tracker->GroupCompositeCountsByRectId())); |
+} |
+ |
+TEST(FrameTimingTrackerTest, NoRectIdsYieldsNoMainFrameEvents) { |
+ scoped_ptr<FrameTimingTracker> tracker(FrameTimingTracker::Create()); |
+ tracker->SaveMainFrameTimeStamps(std::vector<int64_t>(), |
+ base::TimeTicks::FromInternalValue(100), |
+ base::TimeTicks::FromInternalValue(110), 1); |
+ EXPECT_EQ("{\"values\":[]}", |
+ MainFrameToString(tracker->GroupMainFrameCountsByRectId())); |
} |
TEST(FrameTimingTrackerTest, OneFrameId) { |
@@ -55,7 +102,20 @@ TEST(FrameTimingTrackerTest, OneFrameId) { |
EXPECT_EQ( |
"{\"values\":[{\"events\":[" |
"{\"frame_id\":1,\"timestamp\":100}],\"rect_id\":2}]}", |
- ToString(tracker->GroupCountsByRectId())); |
+ CompositeToString(tracker->GroupCompositeCountsByRectId())); |
+} |
+ |
+TEST(FrameTimingTrackerTest, OneMainFrameRect) { |
+ scoped_ptr<FrameTimingTracker> tracker(FrameTimingTracker::Create()); |
+ std::vector<int64_t> rect_ids; |
+ rect_ids.push_back(1); |
+ tracker->SaveMainFrameTimeStamps(rect_ids, |
+ base::TimeTicks::FromInternalValue(100), |
+ base::TimeTicks::FromInternalValue(110), 2); |
+ EXPECT_EQ( |
+ "{\"values\":[{\"events\":[" |
+ "{\"end_time\":110,\"frame_id\":2,\"timestamp\":100}],\"rect_id\":1}]}", |
+ MainFrameToString(tracker->GroupMainFrameCountsByRectId())); |
} |
TEST(FrameTimingTrackerTest, UnsortedTimestampsIds) { |
@@ -70,7 +130,28 @@ TEST(FrameTimingTrackerTest, UnsortedTimestampsIds) { |
"{\"frame_id\":1,\"timestamp\":100}," |
"{\"frame_id\":1,\"timestamp\":200}," |
"{\"frame_id\":1,\"timestamp\":400}],\"rect_id\":2}]}", |
- ToString(tracker->GroupCountsByRectId())); |
+ CompositeToString(tracker->GroupCompositeCountsByRectId())); |
+} |
+ |
+TEST(FrameTimingTrackerTest, MainFrameUnsortedTimestamps) { |
+ scoped_ptr<FrameTimingTracker> tracker(FrameTimingTracker::Create()); |
+ std::vector<int64_t> rect_ids; |
+ rect_ids.push_back(2); |
+ tracker->SaveMainFrameTimeStamps(rect_ids, |
+ base::TimeTicks::FromInternalValue(200), |
+ base::TimeTicks::FromInternalValue(280), 1); |
+ tracker->SaveMainFrameTimeStamps(rect_ids, |
+ base::TimeTicks::FromInternalValue(400), |
+ base::TimeTicks::FromInternalValue(470), 1); |
+ tracker->SaveMainFrameTimeStamps(rect_ids, |
+ base::TimeTicks::FromInternalValue(100), |
+ base::TimeTicks::FromInternalValue(160), 1); |
+ EXPECT_EQ( |
+ "{\"values\":[{\"events\":[" |
+ "{\"end_time\":160,\"frame_id\":1,\"timestamp\":100}," |
+ "{\"end_time\":280,\"frame_id\":1,\"timestamp\":200}," |
+ "{\"end_time\":470,\"frame_id\":1,\"timestamp\":400}],\"rect_id\":2}]}", |
+ MainFrameToString(tracker->GroupMainFrameCountsByRectId())); |
} |
TEST(FrameTimingTrackerTest, MultipleFrameIds) { |
@@ -91,34 +172,56 @@ TEST(FrameTimingTrackerTest, MultipleFrameIds) { |
ids100.push_back(std::make_pair(3, 4)); |
tracker->SaveTimeStamps(base::TimeTicks::FromInternalValue(100), ids100); |
- std::string result = ToString(tracker->GroupCountsByRectId()); |
- |
- EXPECT_EQ(strlen( |
- "{\"values\":[{\"events\":[" |
- "{\"frame_id\":3,\"timestamp\":100}," |
- "{\"frame_id\":1,\"timestamp\":200}," |
- "{\"frame_id\":2,\"timestamp\":400}],\"rect_id\":2}," |
- "{\"events\":[" |
- "{\"frame_id\":2,\"timestamp\":100}," |
- "{\"frame_id\":1,\"timestamp\":200}],\"rect_id\":3}," |
- "{\"events\":[" |
- "{\"frame_id\":3,\"timestamp\":100}],\"rect_id\":4}" |
- "]}"), |
- result.size()); |
- EXPECT_NE(std::string::npos, |
- result.find( |
- "{\"frame_id\":3,\"timestamp\":100}," |
- "{\"frame_id\":1,\"timestamp\":200}," |
- "{\"frame_id\":2,\"timestamp\":400}],\"rect_id\":2}")); |
- EXPECT_NE(std::string::npos, |
- result.find( |
- "{\"events\":[" |
- "{\"frame_id\":2,\"timestamp\":100}," |
- "{\"frame_id\":1,\"timestamp\":200}],\"rect_id\":3}")); |
- EXPECT_NE(std::string::npos, |
- result.find( |
- "{\"events\":[" |
- "{\"frame_id\":3,\"timestamp\":100}],\"rect_id\":4}")); |
+ EXPECT_EQ( |
+ "{\"values\":[{\"events\":[" |
+ "{\"frame_id\":3,\"timestamp\":100}," |
+ "{\"frame_id\":1,\"timestamp\":200}," |
+ "{\"frame_id\":2,\"timestamp\":400}],\"rect_id\":2}," |
+ "{\"events\":[" |
+ "{\"frame_id\":2,\"timestamp\":100}," |
+ "{\"frame_id\":1,\"timestamp\":200}],\"rect_id\":3}," |
+ "{\"events\":[" |
+ "{\"frame_id\":3,\"timestamp\":100}],\"rect_id\":4}" |
+ "]}", |
+ CompositeToString(tracker->GroupCompositeCountsByRectId())); |
+} |
+ |
+TEST(FrameTimingTrackerTest, MultipleMainFrameEvents) { |
+ scoped_ptr<FrameTimingTracker> tracker(FrameTimingTracker::Create()); |
+ |
+ std::vector<int64_t> rect_ids200; |
+ rect_ids200.push_back(2); |
+ rect_ids200.push_back(3); |
+ tracker->SaveMainFrameTimeStamps(rect_ids200, |
+ base::TimeTicks::FromInternalValue(200), |
+ base::TimeTicks::FromInternalValue(220), 1); |
+ |
+ std::vector<int64_t> rect_ids400; |
+ rect_ids400.push_back(2); |
+ tracker->SaveMainFrameTimeStamps(rect_ids400, |
+ base::TimeTicks::FromInternalValue(400), |
+ base::TimeTicks::FromInternalValue(440), 2); |
+ |
+ std::vector<int64_t> rect_ids100; |
+ rect_ids100.push_back(2); |
+ rect_ids100.push_back(3); |
+ rect_ids100.push_back(4); |
+ tracker->SaveMainFrameTimeStamps(rect_ids100, |
+ base::TimeTicks::FromInternalValue(100), |
+ base::TimeTicks::FromInternalValue(110), 3); |
+ |
+ EXPECT_EQ( |
+ "{\"values\":[{\"events\":[" |
+ "{\"end_time\":110,\"frame_id\":3,\"timestamp\":100}," |
+ "{\"end_time\":220,\"frame_id\":1,\"timestamp\":200}," |
+ "{\"end_time\":440,\"frame_id\":2,\"timestamp\":400}],\"rect_id\":2}," |
+ "{\"events\":[" |
+ "{\"end_time\":110,\"frame_id\":3,\"timestamp\":100}," |
+ "{\"end_time\":220,\"frame_id\":1,\"timestamp\":200}],\"rect_id\":3}," |
+ "{\"events\":[" |
+ "{\"end_time\":110,\"frame_id\":3,\"timestamp\":100}],\"rect_id\":4}" |
+ "]}", |
+ MainFrameToString(tracker->GroupMainFrameCountsByRectId())); |
} |
} // namespace |