blob: 131a0c34228843234ab90f749be29822e46872e2 [file] [log] [blame]
/*
* Copyright (C) 2019 The Android Open Source Project
*
* 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 HARDWARE_GOOGLE_CAMERA_HAL_HIDL_SERVICE_HIDL_PROFILER_H_
#define HARDWARE_GOOGLE_CAMERA_HAL_HIDL_SERVICE_HIDL_PROFILER_H_
#include <memory>
#include "profiler.h"
namespace android {
namespace hardware {
namespace camera {
namespace implementation {
class HidlScopedProfiler {
public:
HidlScopedProfiler(std::shared_ptr<google::camera_common::Profiler> profiler,
const std::string name, int id,
std::function<void()> end_callback);
~HidlScopedProfiler();
private:
std::shared_ptr<google::camera_common::Profiler> profiler_;
const std::string name_;
int id_;
std::function<void()> end_callback_;
};
class HidlProfiler {
public:
enum class ScopedType {
kOpen,
kConfigureStream,
kFlush,
kClose,
};
virtual ~HidlProfiler() = default;
static std::shared_ptr<HidlProfiler> Create(uint32_t camera_id);
// Make a ScopedProfiler for given type.
virtual std::unique_ptr<HidlScopedProfiler> MakeScopedProfiler(
ScopedType type) = 0;
// Call when first frame is requested.
virtual void FirstFrameStart() = 0;
// Call when all bufer in first frame is received.
virtual void FirstFrameEnd() = 0;
// Call to profile frame rate for each stream.
virtual void ProfileFrameRate(const std::string& name) = 0;
// Give a customized latency profiler so that client side can intercept various calls.
virtual void SetLatencyProfiler(
std::unique_ptr<google::camera_common::Profiler> profiler) = 0;
// Give a customized fps profiler so that client side can intercept various calls.
virtual void SetFpsProfiler(
std::unique_ptr<google::camera_common::Profiler> profiler) = 0;
virtual uint32_t GetCameraId() const = 0;
virtual int32_t GetLatencyFlag() const = 0;
virtual int32_t GetFpsFlag() const = 0;
protected:
HidlProfiler() = default;
};
} // namespace implementation
} // namespace camera
} // namespace hardware
} // namespace android
#endif // HARDWARE_GOOGLE_CAMERA_HAL_HIDL_SERVICE_HIDL_PROFILER_H_