blob: 35b19edd4cc8bfa8d7bf2af33e7b9b048cebc4cd [file] [log] [blame]
// 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:
Camera3PerfLog(const Camera3PerfLog&) = delete;
Camera3PerfLog& operator=(const Camera3PerfLog&) = delete;
// 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_;
};
} // namespace camera3_test
#endif // CAMERA_CAMERA3_TEST_CAMERA3_PERF_LOG_H_