Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(396)

Side by Side Diff: cc/output/begin_frame_args.cc

Issue 2527283003: cc: Introduce BeginFrame sequence numbers and acknowledgements.
Patch Set: Address Sami's comments, DisplayScheduler observes while BFSObservers exist. Created 4 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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/output/begin_frame_args.h" 5 #include "cc/output/begin_frame_args.h"
6 6
7 #include "base/trace_event/trace_event_argument.h" 7 #include "base/trace_event/trace_event_argument.h"
8 #include "cc/proto/base_conversions.h" 8 #include "cc/proto/base_conversions.h"
9 9
10 namespace cc { 10 namespace cc {
11 11
12 const char* BeginFrameArgs::TypeToString(BeginFrameArgsType type) { 12 const char* BeginFrameArgs::TypeToString(BeginFrameArgsType type) {
13 switch (type) { 13 switch (type) {
14 case BeginFrameArgs::INVALID: 14 case BeginFrameArgs::INVALID:
15 return "INVALID"; 15 return "INVALID";
16 case BeginFrameArgs::NORMAL: 16 case BeginFrameArgs::NORMAL:
17 return "NORMAL"; 17 return "NORMAL";
18 case BeginFrameArgs::MISSED: 18 case BeginFrameArgs::MISSED:
19 return "MISSED"; 19 return "MISSED";
20 case BeginFrameArgs::BEGIN_FRAME_ARGS_TYPE_MAX: 20 case BeginFrameArgs::BEGIN_FRAME_ARGS_TYPE_MAX:
21 return "BEGIN_FRAME_ARGS_TYPE_MAX"; 21 return "BEGIN_FRAME_ARGS_TYPE_MAX";
22 } 22 }
23 NOTREACHED(); 23 NOTREACHED();
24 return "???"; 24 return "???";
25 } 25 }
26 26
27 BeginFrameArgs::BeginFrameArgs() 27 BeginFrameArgs::BeginFrameArgs()
28 : frame_time(base::TimeTicks()), 28 : source_id(0),
29 sequence_number(0),
30 frame_time(base::TimeTicks()),
29 deadline(base::TimeTicks()), 31 deadline(base::TimeTicks()),
30 interval(base::TimeDelta::FromMicroseconds(-1)), 32 interval(base::TimeDelta::FromMicroseconds(-1)),
31 type(BeginFrameArgs::INVALID), 33 type(BeginFrameArgs::INVALID),
32 on_critical_path(true) { 34 on_critical_path(true) {}
33 }
34 35
35 BeginFrameArgs::BeginFrameArgs(base::TimeTicks frame_time, 36 BeginFrameArgs::BeginFrameArgs(uint64_t source_id,
37 uint64_t sequence_number,
38 base::TimeTicks frame_time,
36 base::TimeTicks deadline, 39 base::TimeTicks deadline,
37 base::TimeDelta interval, 40 base::TimeDelta interval,
38 BeginFrameArgs::BeginFrameArgsType type) 41 BeginFrameArgs::BeginFrameArgsType type)
39 : frame_time(frame_time), 42 : source_id(source_id),
43 sequence_number(sequence_number),
Sami 2016/12/07 16:59:40 DCHECK(sequence_number > 0)?
Eric Seckler 2016/12/08 17:54:28 Done.
44 frame_time(frame_time),
40 deadline(deadline), 45 deadline(deadline),
41 interval(interval), 46 interval(interval),
42 type(type), 47 type(type),
43 on_critical_path(true) { 48 on_critical_path(true) {}
44 }
45 49
46 BeginFrameArgs BeginFrameArgs::Create(BeginFrameArgs::CreationLocation location, 50 BeginFrameArgs BeginFrameArgs::Create(BeginFrameArgs::CreationLocation location,
51 uint64_t source_id,
52 uint64_t sequence_number,
47 base::TimeTicks frame_time, 53 base::TimeTicks frame_time,
48 base::TimeTicks deadline, 54 base::TimeTicks deadline,
49 base::TimeDelta interval, 55 base::TimeDelta interval,
50 BeginFrameArgs::BeginFrameArgsType type) { 56 BeginFrameArgs::BeginFrameArgsType type) {
51 DCHECK_NE(type, BeginFrameArgs::INVALID); 57 DCHECK_NE(type, BeginFrameArgs::INVALID);
52 DCHECK_NE(type, BeginFrameArgs::BEGIN_FRAME_ARGS_TYPE_MAX); 58 DCHECK_NE(type, BeginFrameArgs::BEGIN_FRAME_ARGS_TYPE_MAX);
53 #ifdef NDEBUG 59 #ifdef NDEBUG
54 return BeginFrameArgs(frame_time, deadline, interval, type); 60 return BeginFrameArgs(source_id, sequence_number, frame_time, deadline,
61 interval, type);
55 #else 62 #else
56 BeginFrameArgs args = BeginFrameArgs(frame_time, deadline, interval, type); 63 BeginFrameArgs args(source_id, sequence_number, frame_time, deadline,
64 interval, type);
57 args.created_from = location; 65 args.created_from = location;
58 return args; 66 return args;
59 #endif 67 #endif
60 } 68 }
61 69
62 std::unique_ptr<base::trace_event::ConvertableToTraceFormat> 70 std::unique_ptr<base::trace_event::ConvertableToTraceFormat>
63 BeginFrameArgs::AsValue() const { 71 BeginFrameArgs::AsValue() const {
64 std::unique_ptr<base::trace_event::TracedValue> state( 72 std::unique_ptr<base::trace_event::TracedValue> state(
65 new base::trace_event::TracedValue()); 73 new base::trace_event::TracedValue());
66 AsValueInto(state.get()); 74 AsValueInto(state.get());
67 return std::move(state); 75 return std::move(state);
68 } 76 }
69 77
70 void BeginFrameArgs::AsValueInto(base::trace_event::TracedValue* state) const { 78 void BeginFrameArgs::AsValueInto(base::trace_event::TracedValue* state) const {
71 state->SetString("type", "BeginFrameArgs"); 79 state->SetString("type", "BeginFrameArgs");
72 state->SetString("subtype", TypeToString(type)); 80 state->SetString("subtype", TypeToString(type));
81 state->SetInteger("source_id", source_id);
82 state->SetInteger("sequence_number", sequence_number);
73 state->SetDouble("frame_time_us", frame_time.ToInternalValue()); 83 state->SetDouble("frame_time_us", frame_time.ToInternalValue());
74 state->SetDouble("deadline_us", deadline.ToInternalValue()); 84 state->SetDouble("deadline_us", deadline.ToInternalValue());
75 state->SetDouble("interval_us", interval.InMicroseconds()); 85 state->SetDouble("interval_us", interval.InMicroseconds());
76 #ifndef NDEBUG 86 #ifndef NDEBUG
77 state->SetString("created_from", created_from.ToString()); 87 state->SetString("created_from", created_from.ToString());
78 #endif 88 #endif
79 state->SetBoolean("on_critical_path", on_critical_path); 89 state->SetBoolean("on_critical_path", on_critical_path);
80 } 90 }
81 91
82 // This is a hard-coded deadline adjustment that assumes 60Hz, to be used in 92 // This is a hard-coded deadline adjustment that assumes 60Hz, to be used in
83 // cases where a good estimated draw time is not known. Using 1/3 of the vsync 93 // cases where a good estimated draw time is not known. Using 1/3 of the vsync
84 // as the default adjustment gives the Browser the last 1/3 of a frame to 94 // as the default adjustment gives the Browser the last 1/3 of a frame to
85 // produce output, the Renderer Impl thread the middle 1/3 of a frame to produce 95 // produce output, the Renderer Impl thread the middle 1/3 of a frame to produce
86 // ouput, and the Renderer Main thread the first 1/3 of a frame to produce 96 // ouput, and the Renderer Main thread the first 1/3 of a frame to produce
87 // output. 97 // output.
88 base::TimeDelta BeginFrameArgs::DefaultEstimatedParentDrawTime() { 98 base::TimeDelta BeginFrameArgs::DefaultEstimatedParentDrawTime() {
89 return base::TimeDelta::FromMicroseconds(16666 / 3); 99 return base::TimeDelta::FromMicroseconds(16666 / 3);
90 } 100 }
91 101
92 base::TimeDelta BeginFrameArgs::DefaultInterval() { 102 base::TimeDelta BeginFrameArgs::DefaultInterval() {
93 return base::TimeDelta::FromMicroseconds(16666); 103 return base::TimeDelta::FromMicroseconds(16666);
94 } 104 }
95 105
106 BeginFrameAck::BeginFrameAck()
107 : source_id(0),
108 sequence_number(0),
109 oldest_incorporated_frame(0),
110 remaining_frames(0),
111 has_updates(false) {}
112
113 BeginFrameAck::BeginFrameAck(uint64_t source_id,
114 uint64_t sequence_number,
115 uint64_t oldest_incorporated_frame,
116 uint32_t remaining_frames,
117 bool has_updates)
118 : source_id(source_id),
119 sequence_number(sequence_number),
120 oldest_incorporated_frame(oldest_incorporated_frame),
121 remaining_frames(remaining_frames),
122 has_updates(has_updates) {}
Sami 2016/12/07 16:59:40 DCHECK(sequence_number > 0)?
Eric Seckler 2016/12/08 17:54:28 Done.
123
96 } // namespace cc 124 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698