// 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.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_
