// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef CC_SCHEDULER_COMMIT_EARLYOUT_REASON_H_
#define CC_SCHEDULER_COMMIT_EARLYOUT_REASON_H_

#include "base/logging.h"
#include "cc/base/cc_export.h"

namespace cc {

namespace proto {
class CommitEarlyOutReason;
}

enum class CommitEarlyOutReason {
  ABORTED_OUTPUT_SURFACE_LOST,
  ABORTED_NOT_VISIBLE,
  ABORTED_DEFERRED_COMMIT,
  FINISHED_NO_UPDATES,
};

// Please update the To/From Protobuf methods for any updates made to
// CommitEarlyOutReason enum.
CC_EXPORT CommitEarlyOutReason
CommitEarlyOutReasonFromProtobuf(const proto::CommitEarlyOutReason& proto);
CC_EXPORT void CommitEarlyOutReasonToProtobuf(
    CommitEarlyOutReason reason,
    proto::CommitEarlyOutReason* proto);

inline const char* CommitEarlyOutReasonToString(CommitEarlyOutReason reason) {
  switch (reason) {
    case CommitEarlyOutReason::ABORTED_OUTPUT_SURFACE_LOST:
      return "CommitEarlyOutReason::ABORTED_OUTPUT_SURFACE_LOST";
    case CommitEarlyOutReason::ABORTED_NOT_VISIBLE:
      return "CommitEarlyOutReason::ABORTED_NOT_VISIBLE";
    case CommitEarlyOutReason::ABORTED_DEFERRED_COMMIT:
      return "CommitEarlyOutReason::ABORTED_DEFERRED_COMMIT";
    case CommitEarlyOutReason::FINISHED_NO_UPDATES:
      return "CommitEarlyOutReason::FINISHED_NO_UPDATES";
  }
  NOTREACHED();
  return "???";
}

inline bool CommitEarlyOutHandledCommit(CommitEarlyOutReason reason) {
  return reason == CommitEarlyOutReason::FINISHED_NO_UPDATES;
}

}  // namespace cc

#endif  // CC_SCHEDULER_COMMIT_EARLYOUT_REASON_H_
