// Copyright 2017 The Chromium OS 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 CAMERA_CAMERA3_TEST_CAMERA3_PERF_LOG_H_
#define CAMERA_CAMERA3_TEST_CAMERA3_PERF_LOG_H_

#include <map>
#include <string>
#include <utility>
#include <vector>

#include <base/time/time.h>

namespace camera3_test {

enum class DeviceEvent {
  OPENING,
  OPENED,
  PREVIEW_STARTED,
};

enum class FrameEvent {
  SHUTTER,
  PREVIEW_RESULT,
  STILL_CAPTURE_RESULT,
  VIDEO_RECORD_RESULT,
  PORTRAIT_MODE_STARTED,
  PORTRAIT_MODE_ENDED,
};

class Camera3PerfLog final {
 public:
  // Gets the singleton instance
  static Camera3PerfLog* GetInstance();

  void SetCameraNameMap(const std::map<int, std::string>& camera_name_map);

  // Update one-time performance log
  bool UpdateDeviceEvent(int cam_id, DeviceEvent event, base::TimeTicks time);

  // Update per-frame performance log
  bool UpdateFrameEvent(int cam_id,
                        uint32_t frame_number,
                        FrameEvent event,
                        base::TimeTicks time);

 private:
  Camera3PerfLog() {}

  ~Camera3PerfLog();

  // Get the camera name for a specific camera id, and fallback to "{id}" if not
  // found in the map
  std::string GetCameraNameForId(int id);

  std::vector<std::pair<std::string, int64_t>> CollectPerfLogs(
      int cam_id) const;

  // The name used for output log for each id
  std::map<int, std::string> camera_name_map_;

  // Record one-time performance logs with camera id and device event
  std::map<int, std::map<DeviceEvent, base::TimeTicks>> device_events_;

  // Record per-frame performance logs with camera id and frame event
  std::map<int, std::map<uint32_t, std::map<FrameEvent, base::TimeTicks>>>
      frame_events_;

  DISALLOW_COPY_AND_ASSIGN(Camera3PerfLog);
};

}  // namespace camera3_test

#endif  // CAMERA_CAMERA3_TEST_CAMERA3_PERF_LOG_H_
