// Copyright 2016 The Cobalt Authors. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

#ifndef COBALT_BASE_STOP_WATCH_H_
#define COBALT_BASE_STOP_WATCH_H_

#include "base/time/time.h"

namespace base {

class StopWatchOwner;

class StopWatch {
 public:
  enum AutoStart {
    kAutoStartOn,
    kAutoStartOff,
  };

  StopWatch(int id, AutoStart auto_start, StopWatchOwner* owner);
  ~StopWatch();

  void Start();
  void Stop();

  bool IsCounting() const;

 private:
  int id_;
  StopWatchOwner* owner_;

  base::TimeTicks start_time_;
};

class StopWatchOwner {
 protected:
  virtual ~StopWatchOwner() {}

 private:
  virtual bool IsStopWatchEnabled(int id) const = 0;
  virtual void OnStopWatchStopped(int id, base::TimeDelta time_elapsed) = 0;

  friend class StopWatch;
};

}  // namespace base

#endif  // COBALT_BASE_STOP_WATCH_H_
