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
3// found in the LICENSE file.
4
5#include "cc/base/latency_info_swap_promise.h"
6
7#include "base/logging.h"
8
9namespace {
10  ui::LatencyComponentType DidNotSwapReasonToLatencyComponentType(
11      cc::SwapPromise::DidNotSwapReason reason) {
12    switch (reason) {
13      case cc::SwapPromise::DID_NOT_SWAP_UNKNOWN:
14      case cc::SwapPromise::SWAP_FAILS:
15        return ui::INPUT_EVENT_LATENCY_TERMINATED_SWAP_FAILED_COMPONENT;
16      case cc::SwapPromise::COMMIT_FAILS:
17        return ui::INPUT_EVENT_LATENCY_TERMINATED_COMMIT_FAILED_COMPONENT;
18      case cc::SwapPromise::COMMIT_NO_UPDATE:
19        return ui::INPUT_EVENT_LATENCY_TERMINATED_COMMIT_NO_UPDATE_COMPONENT;
20    }
21    NOTREACHED() << "Unhandled DidNotSwapReason.";
22    return ui::INPUT_EVENT_LATENCY_TERMINATED_SWAP_FAILED_COMPONENT;
23  }
24}  // namespace
25
26namespace cc {
27
28LatencyInfoSwapPromise::LatencyInfoSwapPromise(const ui::LatencyInfo& latency)
29    : latency_(latency) {
30}
31
32LatencyInfoSwapPromise::~LatencyInfoSwapPromise() {
33}
34
35void LatencyInfoSwapPromise::DidSwap(CompositorFrameMetadata* metadata) {
36  DCHECK(!latency_.terminated);
37  metadata->latency_info.push_back(latency_);
38}
39
40void LatencyInfoSwapPromise::DidNotSwap(DidNotSwapReason reason) {
41  latency_.AddLatencyNumber(DidNotSwapReasonToLatencyComponentType(reason),
42                            0, 0);
43  // TODO(miletus): Turn this back on once per-event LatencyInfo tracking
44  // is enabled in GPU side.
45  // DCHECK(latency_.terminated);
46}
47
48int64 LatencyInfoSwapPromise::TraceId() const {
49  return latency_.trace_id;
50}
51
52}  // namespace cc
53