| 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..1d2bba357f18ace1481d0bbac95bcbad404f8d9f 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("duration", event.duration.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::TimeDelta::FromInternalValue(10), 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::TimeDelta::FromInternalValue(10), 2);
|
| + EXPECT_EQ(
|
| + "{\"values\":[{\"events\":["
|
| + "{\"duration\":10,\"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::TimeDelta::FromInternalValue(80), 1);
|
| + tracker->SaveMainFrameTimeStamps(rect_ids,
|
| + base::TimeTicks::FromInternalValue(400),
|
| + base::TimeDelta::FromInternalValue(70), 1);
|
| + tracker->SaveMainFrameTimeStamps(rect_ids,
|
| + base::TimeTicks::FromInternalValue(100),
|
| + base::TimeDelta::FromInternalValue(60), 1);
|
| + EXPECT_EQ(
|
| + "{\"values\":[{\"events\":["
|
| + "{\"duration\":60,\"frame_id\":1,\"timestamp\":100},"
|
| + "{\"duration\":80,\"frame_id\":1,\"timestamp\":200},"
|
| + "{\"duration\":70,\"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::TimeDelta::FromInternalValue(20), 1);
|
| +
|
| + std::vector<int64_t> rect_ids400;
|
| + rect_ids400.push_back(2);
|
| + tracker->SaveMainFrameTimeStamps(rect_ids400,
|
| + base::TimeTicks::FromInternalValue(400),
|
| + base::TimeDelta::FromInternalValue(40), 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::TimeDelta::FromInternalValue(10), 3);
|
| +
|
| + EXPECT_EQ(
|
| + "{\"values\":[{\"events\":["
|
| + "{\"duration\":10,\"frame_id\":3,\"timestamp\":100},"
|
| + "{\"duration\":20,\"frame_id\":1,\"timestamp\":200},"
|
| + "{\"duration\":40,\"frame_id\":2,\"timestamp\":400}],\"rect_id\":2},"
|
| + "{\"events\":["
|
| + "{\"duration\":10,\"frame_id\":3,\"timestamp\":100},"
|
| + "{\"duration\":20,\"frame_id\":1,\"timestamp\":200}],\"rect_id\":3},"
|
| + "{\"events\":["
|
| + "{\"duration\":10,\"frame_id\":3,\"timestamp\":100}],\"rect_id\":4}"
|
| + "]}",
|
| + MainFrameToString(tracker->GroupMainFrameCountsByRectId()));
|
| }
|
|
|
| } // namespace
|
|
|