| OLD | NEW |
| 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 "cc/debug/frame_timing_tracker.h" | 5 #include "cc/debug/frame_timing_tracker.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 #include <limits> | 8 #include <limits> |
| 9 | 9 |
| 10 #include "base/metrics/histogram.h" | 10 #include "base/metrics/histogram.h" |
| 11 #include "cc/trees/proxy.h" | 11 #include "cc/trees/proxy.h" |
| 12 | 12 |
| 13 namespace cc { | 13 namespace cc { |
| 14 | 14 |
| 15 FrameTimingTracker::CompositeTimingEvent::CompositeTimingEvent( | 15 FrameTimingTracker::CompositeTimingEvent::CompositeTimingEvent( |
| 16 int _frame_id, | 16 int _frame_id, |
| 17 base::TimeTicks _timestamp) | 17 base::TimeTicks _timestamp) |
| 18 : frame_id(_frame_id), timestamp(_timestamp) { | 18 : frame_id(_frame_id), timestamp(_timestamp) { |
| 19 } | 19 } |
| 20 | 20 |
| 21 FrameTimingTracker::CompositeTimingEvent::~CompositeTimingEvent() { | 21 FrameTimingTracker::CompositeTimingEvent::~CompositeTimingEvent() { |
| 22 } | 22 } |
| 23 | 23 |
| 24 FrameTimingTracker::MainFrameTimingEvent::MainFrameTimingEvent( |
| 25 int frame_id, |
| 26 base::TimeTicks timestamp, |
| 27 base::TimeDelta duration) |
| 28 : frame_id(frame_id), timestamp(timestamp), duration(duration) { |
| 29 } |
| 30 |
| 31 FrameTimingTracker::MainFrameTimingEvent::~MainFrameTimingEvent() { |
| 32 } |
| 33 |
| 24 // static | 34 // static |
| 25 scoped_ptr<FrameTimingTracker> FrameTimingTracker::Create() { | 35 scoped_ptr<FrameTimingTracker> FrameTimingTracker::Create() { |
| 26 return make_scoped_ptr(new FrameTimingTracker); | 36 return make_scoped_ptr(new FrameTimingTracker); |
| 27 } | 37 } |
| 28 | 38 |
| 29 FrameTimingTracker::FrameTimingTracker() { | 39 FrameTimingTracker::FrameTimingTracker() { |
| 30 } | 40 } |
| 31 | 41 |
| 32 FrameTimingTracker::~FrameTimingTracker() { | 42 FrameTimingTracker::~FrameTimingTracker() { |
| 33 } | 43 } |
| 34 | 44 |
| 35 void FrameTimingTracker::SaveTimeStamps( | 45 void FrameTimingTracker::SaveTimeStamps( |
| 36 base::TimeTicks timestamp, | 46 base::TimeTicks timestamp, |
| 37 const std::vector<FrameAndRectIds>& frame_ids) { | 47 const std::vector<FrameAndRectIds>& frame_ids) { |
| 38 if (!composite_events_) | 48 if (!composite_events_) |
| 39 composite_events_.reset(new CompositeTimingSet); | 49 composite_events_.reset(new CompositeTimingSet); |
| 40 for (const auto& pair : frame_ids) | 50 for (const auto& pair : frame_ids) { |
| 41 (*composite_events_)[pair.second].push_back( | 51 (*composite_events_)[pair.second].push_back( |
| 42 CompositeTimingEvent(pair.first, timestamp)); | 52 CompositeTimingEvent(pair.first, timestamp)); |
| 53 } |
| 54 } |
| 55 |
| 56 void FrameTimingTracker::SaveMainFrameTimeStamps( |
| 57 const std::vector<int64_t>& request_ids, |
| 58 base::TimeTicks main_frame_time, |
| 59 base::TimeDelta frame_duration, |
| 60 int source_frame_number) { |
| 61 if (!main_frame_events_) |
| 62 main_frame_events_.reset(new MainFrameTimingSet); |
| 63 for (const auto& request : request_ids) { |
| 64 std::vector<MainFrameTimingEvent>& events = (*main_frame_events_)[request]; |
| 65 events.push_back(MainFrameTimingEvent(source_frame_number, main_frame_time, |
| 66 frame_duration)); |
| 67 } |
| 43 } | 68 } |
| 44 | 69 |
| 45 scoped_ptr<FrameTimingTracker::CompositeTimingSet> | 70 scoped_ptr<FrameTimingTracker::CompositeTimingSet> |
| 46 FrameTimingTracker::GroupCountsByRectId() { | 71 FrameTimingTracker::GroupCompositeCountsByRectId() { |
| 47 if (!composite_events_) | 72 if (!composite_events_) |
| 48 return make_scoped_ptr(new CompositeTimingSet); | 73 return make_scoped_ptr(new CompositeTimingSet); |
| 49 scoped_ptr<CompositeTimingSet> composite_info(new CompositeTimingSet); | 74 for (auto& infos : *composite_events_) { |
| 50 for (auto& infos : *composite_events_) | |
| 51 std::sort( | 75 std::sort( |
| 52 infos.second.begin(), infos.second.end(), | 76 infos.second.begin(), infos.second.end(), |
| 53 [](const CompositeTimingEvent& lhs, const CompositeTimingEvent& rhs) { | 77 [](const CompositeTimingEvent& lhs, const CompositeTimingEvent& rhs) { |
| 54 return lhs.timestamp < rhs.timestamp; | 78 return lhs.timestamp < rhs.timestamp; |
| 55 }); | 79 }); |
| 80 } |
| 56 return composite_events_.Pass(); | 81 return composite_events_.Pass(); |
| 57 } | 82 } |
| 58 | 83 |
| 84 scoped_ptr<FrameTimingTracker::MainFrameTimingSet> |
| 85 FrameTimingTracker::GroupMainFrameCountsByRectId() { |
| 86 if (!main_frame_events_) |
| 87 return make_scoped_ptr(new MainFrameTimingSet); |
| 88 for (auto& infos : *main_frame_events_) { |
| 89 std::sort( |
| 90 infos.second.begin(), infos.second.end(), |
| 91 [](const MainFrameTimingEvent& lhs, const MainFrameTimingEvent& rhs) { |
| 92 return lhs.timestamp < rhs.timestamp; |
| 93 }); |
| 94 } |
| 95 return main_frame_events_.Pass(); |
| 96 } |
| 97 |
| 59 } // namespace cc | 98 } // namespace cc |
| OLD | NEW |