添加hitrace打点

Signed-off-by: chen0088 <chenmenghuan3@huawei.com>
This commit is contained in:
chen0088
2022-06-08 17:37:22 +08:00
parent 0ab5d7782d
commit 1180ea87b8
7 changed files with 54 additions and 20 deletions
@@ -25,13 +25,17 @@
namespace OHOS {
namespace DistributedHardware {
constexpr uint64_t DCAMERA_HITRACE_LABEL = HITRACE_TAG_DISTRIBUTED_CAMERA;
const std::string DCAMERA_OPEN_CHANNEL_START = "DCAMERA_OPEN_CHANNEL_START";
const std::string DCAMERA_INPUT_OPEN_START = "DCAMERA_INPUT_OPEN_START";
const std::string DCAMERA_CAPTURE_FIRST_FRAME = "DCAMERA_CAPTURE_GET_FIRST_FRAME";
const std::string DCAMERA_OPEN_CHANNEL_CONTROL = "DCAMERA_OPEN_CHANNEL_CONTROL";
const std::string DCAMERA_OPEN_DATA_CONTINUE = "DCAMERA_OPEN_DATA_CONTINUE";
const std::string DCAMERA_OPEN_DATA_SNAPSHOT = "DCAMERA_OPEN_DATA_SNAPSHOT";
const std::string DCAMERA_CONTINUE_FIRST_FRAME = "DCAMERA_CONTINUE_FIRST_FRAME";
const std::string DCAMERA_SNAPSHOT_FIRST_FRAME = "DCAMERA_SNAPSHOT_FIRST_FRAME";
enum DcameraTaskId {
DCAMERA_OPEN_CHANNEL_TASKID = 0,
DCAMERA_INPUT_OPEN_TASKID = 1,
DCAMERA_CAPTURE_FIRST_FRAM_TASKID = 2,
DCAMERA_OPEN_DATA_CONTINUE_TASKID = 1,
DCAMERA_OPEN_DATA_SNAPSHOT_TASKID = 2,
DCAMERA_CONTINUE_FIRST_FRAME_TASKID = 3,
DCAMERA_SNAPSHOT_FIRST_FRAME_TASKID = 4,
};
void DcameraStartAsyncTrace(const std::string& str, int32_t taskId);
@@ -75,6 +75,7 @@ private:
void NotifyRegisterResult(DCAMERA_EVENT eventType, DCameraSourceEvent& event, int32_t result);
void NotifyUnregisterResult(DCAMERA_EVENT eventType, DCameraSourceEvent& event, int32_t result);
void NotifyHalResult(DCAMERA_EVENT eventType, DCameraSourceEvent& event, int32_t result);
void HitraceAndHisyseventImpl(std::vector<std::shared_ptr<DCCaptureInfo>>& captureInfos);
private:
std::string devId_;
@@ -406,7 +406,7 @@ int32_t DCameraSourceDev::ExecuteReleaseAllStreams()
int32_t DCameraSourceDev::ExecuteStartCapture(std::vector<std::shared_ptr<DCCaptureInfo>>& captureInfos)
{
DcameraStartAsyncTrace(DCAMERA_CAPTURE_FIRST_FRAME, DCAMERA_CAPTURE_FIRST_FRAM_TASKID);
HitraceAndHisyseventImpl(captureInfos);
DHLOGI("DCameraSourceDev Execute StartCapture devId %s dhId %s", GetAnonyString(devId_).c_str(),
GetAnonyString(dhId_).c_str());
int32_t ret = input_->StartCapture(captureInfos);
@@ -429,15 +429,6 @@ int32_t DCameraSourceDev::ExecuteStartCapture(std::vector<std::shared_ptr<DCCapt
GetAnonyString(devId_).c_str(), GetAnonyString(dhId_).c_str(), (*iter)->captureSettings_.size(),
capture->width_, capture->height_, capture->format_, capture->isCapture_ ? 1 : 0, capture->encodeType_,
capture->streamType_);
EventCaptureInfo eventCaptureInfo = {
.width_ = capture->width_,
.height_ = capture->height_,
.format_ = capture->format_,
.isCapture_ = capture->isCapture_,
.encodeType_ = capture->encodeType_,
.type_ = capture->streamType_,
};
ReportStartCaptureEvent(START_CAPTURE_EVENT, eventCaptureInfo, "execute start capture event.");
for (auto settingIter = (*iter)->captureSettings_.begin(); settingIter != (*iter)->captureSettings_.end();
settingIter++) {
std::shared_ptr<DCameraSettings> setting = std::make_shared<DCameraSettings>();
@@ -456,6 +447,27 @@ int32_t DCameraSourceDev::ExecuteStartCapture(std::vector<std::shared_ptr<DCCapt
return ret;
}
void DCameraSourceDev::HitraceAndHisyseventImpl(std::vector<std::shared_ptr<DCCaptureInfo>>& captureInfos)
{
for (auto iter = captureInfos.begin(); iter != captureInfos.end(); iter++) {
std::shared_ptr<DCCaptureInfo> capture = *iter;
EventCaptureInfo eventCaptureInfo = {
.width_ = capture->width_,
.height_ = capture->height_,
.format_ = capture->format_,
.isCapture_ = capture->isCapture_,
.encodeType_ = capture->encodeType_,
.type_ = capture->type_,
};
ReportStartCaptureEvent(START_CAPTURE_EVENT, eventCaptureInfo, "execute start capture event.");
if (capture->type_ == CONTINUOUS_FRAME && capture->isCapture_ == true) {
DcameraStartAsyncTrace(DCAMERA_CONTINUE_FIRST_FRAME, DCAMERA_CONTINUE_FIRST_FRAME_TASKID);
} else if (capture->type_ == SNAPSHOT_FRAME && capture->isCapture_ == true) {
DcameraStartAsyncTrace(DCAMERA_SNAPSHOT_FIRST_FRAME, DCAMERA_SNAPSHOT_FIRST_FRAME_TASKID);
}
}
}
int32_t DCameraSourceDev::ExecuteStopCapture(std::vector<int>& streamIds, bool& isAllStop)
{
DHLOGI("DCameraSourceDev Execute StopCapture devId %s dhId %s", GetAnonyString(devId_).c_str(),
@@ -265,7 +265,7 @@ int32_t DCameraSourceController::GetCameraInfo(std::shared_ptr<DCameraInfo>& cam
int32_t DCameraSourceController::OpenChannel(std::shared_ptr<DCameraOpenInfo>& openInfo)
{
DcameraStartAsyncTrace(DCAMERA_OPEN_CHANNEL_START, DCAMERA_OPEN_CHANNEL_TASKID);
DcameraStartAsyncTrace(DCAMERA_OPEN_CHANNEL_CONTROL, DCAMERA_OPEN_CHANNEL_TASKID);
if (indexs_.size() > DCAMERA_MAX_NUM) {
DHLOGE("DCameraSourceController OpenChannel not support operate %d camera", indexs_.size());
return DCAMERA_BAD_OPERATE;
@@ -383,7 +383,7 @@ void DCameraSourceController::OnSessionState(int32_t state)
channelState_ = state;
switch (state) {
case DCAMERA_CHANNEL_STATE_CONNECTED: {
DcameraFinishAsyncTrace(DCAMERA_OPEN_CHANNEL_START, DCAMERA_OPEN_CHANNEL_TASKID);
DcameraFinishAsyncTrace(DCAMERA_OPEN_CHANNEL_CONTROL, DCAMERA_OPEN_CHANNEL_TASKID);
stateMachine_->UpdateState(DCAMERA_STATE_OPENED);
std::shared_ptr<DCameraEvent> camEvent = std::make_shared<DCameraEvent>();
camEvent->eventType_ = DCAMERA_MESSAGE;
@@ -16,12 +16,15 @@
#include "dcamera_source_data_process.h"
#include "anonymous_string.h"
#include "dcamera_hitrace_adapter.h"
#include "distributed_camera_constants.h"
#include "distributed_camera_errno.h"
#include "distributed_hardware_log.h"
namespace OHOS {
namespace DistributedHardware {
constexpr int32_t REVEIVE_FIRST_STREAM = 1;
int32_t g_countStream = 0;
DCameraSourceDataProcess::DCameraSourceDataProcess(std::string devId, std::string dhId, DCStreamType streamType)
: devId_(devId), dhId_(dhId), streamType_(streamType)
{
@@ -39,6 +42,12 @@ DCameraSourceDataProcess::~DCameraSourceDataProcess()
int32_t DCameraSourceDataProcess::FeedStream(std::vector<std::shared_ptr<DataBuffer>>& buffers)
{
g_countStream++;
if (g_countStream == REVEIVE_FIRST_STREAM && streamType_ == CONTINUOUS_FRAME) {
DcameraFinishAsyncTrace(DCAMERA_CONTINUE_FIRST_FRAME, DCAMERA_CONTINUE_FIRST_FRAME_TASKID);
} else if (g_countStream == REVEIVE_FIRST_STREAM && streamType_ == SNAPSHOT_FRAME) {
DcameraFinishAsyncTrace(DCAMERA_SNAPSHOT_FIRST_FRAME, DCAMERA_SNAPSHOT_FIRST_FRAME_TASKID);
}
if (buffers.size() > DCAMERA_MAX_NUM) {
DHLOGI("DCameraSourceDataProcess FeedStream devId %s dhId %s size: %d over flow",
GetAnonyString(devId_).c_str(), GetAnonyString(dhId_).c_str(), buffers.size());
@@ -180,12 +180,12 @@ int32_t DCameraSourceInput::StopCapture(std::vector<int>& streamIds, bool& isAll
int32_t DCameraSourceInput::OpenChannel(std::vector<DCameraIndex>& indexs)
{
DcameraStartAsyncTrace(DCAMERA_INPUT_OPEN_START, DCAMERA_INPUT_OPEN_TASKID);
DHLOGI("DCameraSourceInput OpenChannel devId %s dhId %s continue state: %d, snapshot state: %d",
GetAnonyString(devId_).c_str(), GetAnonyString(dhId_).c_str(), channelState_[CONTINUOUS_FRAME],
channelState_[SNAPSHOT_FRAME]);
int32_t ret = DCAMERA_OK;
if (channelState_[CONTINUOUS_FRAME] == DCAMERA_CHANNEL_STATE_DISCONNECTED) {
DcameraStartAsyncTrace(DCAMERA_OPEN_DATA_CONTINUE, DCAMERA_OPEN_DATA_CONTINUE_TASKID);
ret = channels_[CONTINUOUS_FRAME]->CreateSession(indexs, CONTINUE_SESSION_FLAG, DCAMERA_SESSION_MODE_VIDEO,
listeners_[CONTINUOUS_FRAME]);
if (ret != DCAMERA_OK) {
@@ -203,6 +203,7 @@ int32_t DCameraSourceInput::OpenChannel(std::vector<DCameraIndex>& indexs)
}
if (channelState_[SNAPSHOT_FRAME] == DCAMERA_CHANNEL_STATE_DISCONNECTED) {
DcameraStartAsyncTrace(DCAMERA_OPEN_DATA_SNAPSHOT, DCAMERA_OPEN_DATA_SNAPSHOT_TASKID);
ret = channels_[SNAPSHOT_FRAME]->CreateSession(indexs, SNAP_SHOT_SESSION_FLAG, DCAMERA_SESSION_MODE_JPEG,
listeners_[SNAPSHOT_FRAME]);
if (ret != DCAMERA_OK) {
@@ -325,8 +326,16 @@ void DCameraSourceInput::OnSessionState(DCStreamType streamType, int32_t state)
eventBus_->PostEvent<DCameraSourceEvent>(srcEvent);
break;
}
case DCAMERA_CHANNEL_STATE_CONNECTED: {
if (streamType == CONTINUOUS_FRAME) {
DcameraFinishAsyncTrace(DCAMERA_OPEN_DATA_CONTINUE, DCAMERA_OPEN_DATA_CONTINUE_TASKID);
} else if (streamType == SNAPSHOT_FRAME) {
DcameraFinishAsyncTrace(DCAMERA_OPEN_DATA_SNAPSHOT, DCAMERA_OPEN_DATA_SNAPSHOT_TASKID);
}
DHLOGI("DCameraSourceInput OnSessionState state %d", state);
break;
}
default: {
DcameraFinishAsyncTrace(DCAMERA_INPUT_OPEN_START, DCAMERA_INPUT_OPEN_TASKID);
DHLOGI("DCameraSourceInput OnSessionState state %d", state);
break;
}
@@ -176,7 +176,6 @@ void DCameraStreamDataProcessProducer::LooperSnapShot()
GetAnonyString(devId_).c_str(), GetAnonyString(dhId_).c_str(), streamType_, streamId_, state_);
continue;
}
DcameraFinishAsyncTrace(DCAMERA_CAPTURE_FIRST_FRAME, DCAMERA_CAPTURE_FIRST_FRAM_TASKID);
int32_t ret = FeedStreamToDriver(dhBase, buffer);
if (ret != DCAMERA_OK) {
std::this_thread::sleep_for(std::chrono::milliseconds(DCAMERA_PRODUCER_RETRY_SLEEP_MS));