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

#ifndef COMPONENTS_VIZ_TEST_BEGIN_FRAME_ARGS_TEST_H_
#define COMPONENTS_VIZ_TEST_BEGIN_FRAME_ARGS_TEST_H_

#include <stdint.h>

#include <iosfwd>

#include "base/time/time.h"
#include "components/viz/common/frame_sinks/begin_frame_args.h"

namespace base {
class TickClock;
}

namespace viz {

// Functions for quickly creating BeginFrameArgs
BeginFrameArgs CreateBeginFrameArgsForTesting(
    BeginFrameArgs::CreationLocation location,
    uint64_t source_id,
    uint64_t sequence_number);

BeginFrameArgs CreateBeginFrameArgsForTesting(
    BeginFrameArgs::CreationLocation location,
    uint64_t source_id,
    uint64_t sequence_number,
    base::TimeTicks frame_time);

BeginFrameArgs CreateBeginFrameArgsForTesting(
    BeginFrameArgs::CreationLocation location,
    uint64_t source_id,
    uint64_t sequence_number,
    int64_t frame_time,
    int64_t deadline,
    int64_t interval,
    BeginFrameArgs::BeginFrameArgsType type = BeginFrameArgs::NORMAL,
    int64_t unthrottled_interval = -1);

BeginFrameArgs CreateBeginFrameArgsForTesting(
    BeginFrameArgs::CreationLocation location,
    uint64_t source_id,
    uint64_t sequence_number,
    base::TimeTicks frame_time,
    base::TimeTicks deadline,
    base::TimeDelta interval,
    BeginFrameArgs::BeginFrameArgsType type = BeginFrameArgs::NORMAL,
    base::TimeDelta unthrottled_interval = base::TimeDelta());

// Creates a BeginFrameArgs using the fake Now value stored on the
// OrderSimpleTaskRunner.
BeginFrameArgs CreateBeginFrameArgsForTesting(
    BeginFrameArgs::CreationLocation location,
    uint64_t source_id,
    uint64_t sequence_number,
    const base::TickClock* now_src);

// gtest helpers -- these *must* be in the same namespace as the types they
// operate on.

// Allow "EXPECT_EQ(args1, args2);"
bool operator==(const BeginFrameArgs& lhs, const BeginFrameArgs& rhs);

// Allow gtest to pretty print begin frame args.
::std::ostream& operator<<(::std::ostream& os, const BeginFrameArgs& args);
void PrintTo(const BeginFrameArgs& args, ::std::ostream* os);

// Allow "EXPECT_EQ(ack1, ack2);"
bool operator==(const BeginFrameAck& lhs, const BeginFrameAck& rhs);

// Allow gtest to pretty print BeginFrameAcks.
::std::ostream& operator<<(::std::ostream& os, const BeginFrameAck& ack);
void PrintTo(const BeginFrameAck& ack, ::std::ostream* os);

}  // namespace viz

#endif  // COMPONENTS_VIZ_TEST_BEGIN_FRAME_ARGS_TEST_H_
