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
This commit is contained in:
Alex Ray 2013-04-29 12:24:49 -07:00
parent 005c9da544
commit c16e56dd43
2 changed files with 55 additions and 9 deletions

View file

@ -25,6 +25,7 @@
#define ATRACE_TAG (ATRACE_TAG_CAMERA | ATRACE_TAG_HAL)
#include <cutils/trace.h>
#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;
}

View file

@ -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 <stdint.h>
#include <cutils/trace.h>
// See <cutils/trace.h> 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