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 |