| Index: cc/output/begin_frame_args.cc
 | 
| diff --git a/cc/output/begin_frame_args.cc b/cc/output/begin_frame_args.cc
 | 
| index b45eee8c111e504518a90cd02f0f198d84efbe9d..fc7098f4798cb1aefbf763f583da487f0fb5572f 100644
 | 
| --- a/cc/output/begin_frame_args.cc
 | 
| +++ b/cc/output/begin_frame_args.cc
 | 
| @@ -10,23 +10,35 @@
 | 
|  namespace cc {
 | 
|  
 | 
|  BeginFrameArgs::BeginFrameArgs()
 | 
| -  : frame_time(base::TimeTicks()),
 | 
| -    deadline(base::TimeTicks()),
 | 
| -    interval(base::TimeDelta::FromMicroseconds(-1)) {
 | 
| +    : frame_time(base::TimeTicks()),
 | 
| +      deadline(base::TimeTicks()),
 | 
| +      interval(base::TimeDelta::FromMicroseconds(-1)),
 | 
| +      type(BeginFrameArgs::INVALID) {
 | 
|  }
 | 
|  
 | 
|  BeginFrameArgs::BeginFrameArgs(base::TimeTicks frame_time,
 | 
|                                 base::TimeTicks deadline,
 | 
| -                               base::TimeDelta interval)
 | 
| -  : frame_time(frame_time),
 | 
| -    deadline(deadline),
 | 
| -    interval(interval)
 | 
| -{}
 | 
| +                               base::TimeDelta interval,
 | 
| +                               BeginFrameArgs::BeginFrameArgsType type)
 | 
| +    : frame_time(frame_time),
 | 
| +      deadline(deadline),
 | 
| +      interval(interval),
 | 
| +      type(type) {
 | 
| +}
 | 
| +
 | 
| +BeginFrameArgs BeginFrameArgs::CreateTyped(
 | 
| +    base::TimeTicks frame_time,
 | 
| +    base::TimeTicks deadline,
 | 
| +    base::TimeDelta interval,
 | 
| +    BeginFrameArgs::BeginFrameArgsType type) {
 | 
| +  DCHECK_NE(type, BeginFrameArgs::INVALID);
 | 
| +  return BeginFrameArgs(frame_time, deadline, interval, type);
 | 
| +}
 | 
|  
 | 
|  BeginFrameArgs BeginFrameArgs::Create(base::TimeTicks frame_time,
 | 
|                                        base::TimeTicks deadline,
 | 
|                                        base::TimeDelta interval) {
 | 
| -  return BeginFrameArgs(frame_time, deadline, interval);
 | 
| +  return CreateTyped(frame_time, deadline, interval, BeginFrameArgs::NORMAL);
 | 
|  }
 | 
|  
 | 
|  scoped_refptr<base::debug::ConvertableToTraceFormat> BeginFrameArgs::AsValue()
 | 
| @@ -39,6 +51,20 @@ scoped_refptr<base::debug::ConvertableToTraceFormat> BeginFrameArgs::AsValue()
 | 
|  
 | 
|  void BeginFrameArgs::AsValueInto(base::debug::TracedValue* state) const {
 | 
|    state->SetString("type", "BeginFrameArgs");
 | 
| +  switch (type) {
 | 
| +    case BeginFrameArgs::INVALID:
 | 
| +      state->SetString("subtype", "INVALID");
 | 
| +      break;
 | 
| +    case BeginFrameArgs::NORMAL:
 | 
| +      state->SetString("subtype", "NORMAL");
 | 
| +      break;
 | 
| +    case BeginFrameArgs::SYNCHRONOUS:
 | 
| +      state->SetString("subtype", "SYNCHRONOUS");
 | 
| +      break;
 | 
| +    case BeginFrameArgs::MISSED:
 | 
| +      state->SetString("subtype", "MISSED");
 | 
| +      break;
 | 
| +  }
 | 
|    state->SetDouble("frame_time_us", frame_time.ToInternalValue());
 | 
|    state->SetDouble("deadline_us", deadline.ToInternalValue());
 | 
|    state->SetDouble("interval_us", interval.InMicroseconds());
 | 
| @@ -50,7 +76,8 @@ BeginFrameArgs BeginFrameArgs::CreateForSynchronousCompositor(
 | 
|    // so we set the deadline to 0 and guess that the interval is 16 milliseconds.
 | 
|    if (now.is_null())
 | 
|      now = gfx::FrameTime::Now();
 | 
| -  return BeginFrameArgs(now, base::TimeTicks(), DefaultInterval());
 | 
| +  return CreateTyped(
 | 
| +      now, base::TimeTicks(), DefaultInterval(), BeginFrameArgs::SYNCHRONOUS);
 | 
|  }
 | 
|  
 | 
|  // This is a hard-coded deadline adjustment that assumes 60Hz, to be used in
 | 
| 
 |