From c16e56dd43643d9013a72ddc42ab08e72f485382 Mon Sep 17 00:00:00 2001 From: Alex Ray Date: Mon, 29 Apr 2013 12:24:49 -0700 Subject: [PATCH] modules: camera: Add scoped trace helper This c++ helper class is normally provided by frameworks/native's libutils, but cannot be used from the context of a hardware module. For now just add the required functionality locally in the hardware module. Change-Id: I5b399cbeb1c017a95baf19456dbf20569e677fbe --- modules/camera/Camera.cpp | 13 +++------ modules/camera/ScopedTrace.h | 51 ++++++++++++++++++++++++++++++++++++ 2 files changed, 55 insertions(+), 9 deletions(-) create mode 100644 modules/camera/ScopedTrace.h diff --git a/modules/camera/Camera.cpp b/modules/camera/Camera.cpp index eeae41f2..d477ef6c 100644 --- a/modules/camera/Camera.cpp +++ b/modules/camera/Camera.cpp @@ -25,6 +25,7 @@ #define ATRACE_TAG (ATRACE_TAG_CAMERA | ATRACE_TAG_HAL) #include +#include "ScopedTrace.h" #include "Camera.h" @@ -62,11 +63,10 @@ Camera::~Camera() int Camera::open(const hw_module_t *module, hw_device_t **device) { ALOGI("%s:%d: Opening camera device", __func__, mId); - ATRACE_BEGIN(__func__); + CAMTRACE_CALL(); pthread_mutex_lock(&mMutex); if (mBusy) { pthread_mutex_unlock(&mMutex); - ATRACE_END(); ALOGE("%s:%d: Error! Camera device already opened", __func__, mId); return -EBUSY; } @@ -77,18 +77,16 @@ int Camera::open(const hw_module_t *module, hw_device_t **device) *device = &mDevice.common; pthread_mutex_unlock(&mMutex); - ATRACE_END(); return 0; } int Camera::close() { ALOGI("%s:%d: Closing camera device", __func__, mId); - ATRACE_BEGIN(__func__); + CAMTRACE_CALL(); pthread_mutex_lock(&mMutex); if (!mBusy) { pthread_mutex_unlock(&mMutex); - ATRACE_END(); ALOGE("%s:%d: Error! Camera device not open", __func__, mId); return -EINVAL; } @@ -97,7 +95,6 @@ int Camera::close() mBusy = false; pthread_mutex_unlock(&mMutex); - ATRACE_END(); return 0; } @@ -132,16 +129,14 @@ const camera_metadata_t* Camera::constructDefaultRequestSettings(int type) int Camera::processCaptureRequest(camera3_capture_request_t *request) { ALOGV("%s:%d: request=%p", __func__, mId, request); - ATRACE_BEGIN(__func__); + CAMTRACE_CALL(); if (request == NULL) { ALOGE("%s:%d: NULL request recieved", __func__, mId); - ATRACE_END(); return -EINVAL; } // TODO: verify request; submit request to hardware - ATRACE_END(); return 0; } diff --git a/modules/camera/ScopedTrace.h b/modules/camera/ScopedTrace.h new file mode 100644 index 00000000..ed005709 --- /dev/null +++ b/modules/camera/ScopedTrace.h @@ -0,0 +1,51 @@ +/* + * Copyright (C) 2013 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 CAMERA_SCOPED_TRACE_H +#define CAMERA_SCOPED_TRACE_H + +#include +#include + +// See for more tracing macros. + +// CAMTRACE_NAME traces the beginning and end of the current scope. To trace +// the correct start and end times this macro should be declared first in the +// scope body. +#define CAMTRACE_NAME(name) ScopedTrace ___tracer(ATRACE_TAG, name) +// CAMTRACE_CALL is an ATRACE_NAME that uses the current function name. +#define CAMTRACE_CALL() CAMTRACE_NAME(__FUNCTION__) + +namespace default_camera_hal { + +class ScopedTrace { +public: +inline ScopedTrace(uint64_t tag, const char* name) + : mTag(tag) { + atrace_begin(mTag,name); +} + +inline ~ScopedTrace() { + atrace_end(mTag); +} + +private: + uint64_t mTag; +}; + +}; // namespace default_camera_hal + +#endif // CAMERA_SCOPED_TRACE_H