Merge "Camera: Cache monitored tag options in service"

gugelfrei
TreeHugger Robot 6 years ago committed by Android (Google) Code Review
commit 7dc2089881

@ -67,6 +67,7 @@
#include "api1/Camera2Client.h"
#include "api2/CameraDeviceClient.h"
#include "utils/CameraTraces.h"
#include "utils/TagMonitor.h"
namespace {
const char* kPermissionServiceName = "permission";
@ -1364,7 +1365,7 @@ Status CameraService::connectHelper(const sp<CALLBACK>& cameraCb, const String8&
LOG_ALWAYS_FATAL_IF(client.get() == nullptr, "%s: CameraService in invalid state",
__FUNCTION__);
err = client->initialize(mCameraProviderManager);
err = client->initialize(mCameraProviderManager, mMonitorTags);
if (err != OK) {
ALOGE("%s: Could not initialize client from HAL.", __FUNCTION__);
// Errors could be from the HAL module open call or from AppOpsManager
@ -2640,6 +2641,16 @@ status_t CameraService::dump(int fd, const Vector<String16>& args) {
dprintf(fd, "CameraStates in use, may be deadlocked\n");
}
int argSize = args.size();
for (int i = 0; i < argSize; i++) {
if (args[i] == TagMonitor::kMonitorOption) {
if (i + 1 < argSize) {
mMonitorTags = String8(args[i + 1]);
}
break;
}
}
for (auto& state : mCameraStates) {
String8 cameraId = state.first;

@ -204,7 +204,8 @@ public:
class BasicClient : public virtual RefBase {
public:
virtual status_t initialize(sp<CameraProviderManager> manager) = 0;
virtual status_t initialize(sp<CameraProviderManager> manager,
const String8& monitorTags) = 0;
virtual binder::Status disconnect();
// because we can't virtually inherit IInterface, which breaks
@ -606,6 +607,9 @@ private:
RingBuffer<String8> mEventLog;
Mutex mLogLock;
// The last monitored tags set by client
String8 mMonitorTags;
// Currently allowed user IDs
std::set<userid_t> mAllowedUsers;

@ -69,8 +69,8 @@ Camera2Client::Camera2Client(const sp<CameraService>& cameraService,
mLegacyMode = legacyMode;
}
status_t Camera2Client::initialize(sp<CameraProviderManager> manager) {
return initializeImpl(manager);
status_t Camera2Client::initialize(sp<CameraProviderManager> manager, const String8& monitorTags) {
return initializeImpl(manager, monitorTags);
}
bool Camera2Client::isZslEnabledInStillTemplate() {
@ -88,13 +88,13 @@ bool Camera2Client::isZslEnabledInStillTemplate() {
}
template<typename TProviderPtr>
status_t Camera2Client::initializeImpl(TProviderPtr providerPtr)
status_t Camera2Client::initializeImpl(TProviderPtr providerPtr, const String8& monitorTags)
{
ATRACE_CALL();
ALOGV("%s: Initializing client for camera %d", __FUNCTION__, mCameraId);
status_t res;
res = Camera2ClientBase::initialize(providerPtr);
res = Camera2ClientBase::initialize(providerPtr, monitorTags);
if (res != OK) {
return res;
}

@ -101,7 +101,8 @@ public:
virtual ~Camera2Client();
virtual status_t initialize(sp<CameraProviderManager> manager) override;
virtual status_t initialize(sp<CameraProviderManager> manager,
const String8& monitorTags) override;
virtual status_t dump(int fd, const Vector<String16>& args);
@ -224,7 +225,7 @@ private:
status_t overrideVideoSnapshotSize(Parameters &params);
template<typename TProviderPtr>
status_t initializeImpl(TProviderPtr providerPtr);
status_t initializeImpl(TProviderPtr providerPtr, const String8& monitorTags);
bool isZslEnabledInStillTemplate();
};

@ -62,7 +62,8 @@ CameraClient::CameraClient(const sp<CameraService>& cameraService,
LOG1("CameraClient::CameraClient X (pid %d, id %d)", callingPid, cameraId);
}
status_t CameraClient::initialize(sp<CameraProviderManager> manager) {
status_t CameraClient::initialize(sp<CameraProviderManager> manager,
const String8& /*monitorTags*/) {
int callingPid = getCallingPid();
status_t res;

@ -72,7 +72,8 @@ public:
bool legacyMode = false);
~CameraClient();
virtual status_t initialize(sp<CameraProviderManager> manager) override;
virtual status_t initialize(sp<CameraProviderManager> manager,
const String8& monitorTags) override;
virtual status_t dump(int fd, const Vector<String16>& args);

@ -88,16 +88,17 @@ CameraDeviceClient::CameraDeviceClient(const sp<CameraService>& cameraService,
ALOGI("CameraDeviceClient %s: Opened", cameraId.string());
}
status_t CameraDeviceClient::initialize(sp<CameraProviderManager> manager) {
return initializeImpl(manager);
status_t CameraDeviceClient::initialize(sp<CameraProviderManager> manager,
const String8& monitorTags) {
return initializeImpl(manager, monitorTags);
}
template<typename TProviderPtr>
status_t CameraDeviceClient::initializeImpl(TProviderPtr providerPtr) {
status_t CameraDeviceClient::initializeImpl(TProviderPtr providerPtr, const String8& monitorTags) {
ATRACE_CALL();
status_t res;
res = Camera2ClientBase::initialize(providerPtr);
res = Camera2ClientBase::initialize(providerPtr, monitorTags);
if (res != OK) {
return res;
}

@ -157,7 +157,8 @@ public:
int servicePid);
virtual ~CameraDeviceClient();
virtual status_t initialize(sp<CameraProviderManager> manager) override;
virtual status_t initialize(sp<CameraProviderManager> manager,
const String8& monitorTags) override;
virtual status_t dump(int fd, const Vector<String16>& args);
@ -225,7 +226,7 @@ private:
std::vector<int32_t> mSupportedPhysicalRequestKeys;
template<typename TProviderPtr>
status_t initializeImpl(TProviderPtr providerPtr);
status_t initializeImpl(TProviderPtr providerPtr, const String8& monitorTags);
/** Utility members */
binder::Status checkPidStatus(const char* checkLocation);

@ -80,13 +80,15 @@ status_t Camera2ClientBase<TClientBase>::checkPid(const char* checkLocation)
}
template <typename TClientBase>
status_t Camera2ClientBase<TClientBase>::initialize(sp<CameraProviderManager> manager) {
return initializeImpl(manager);
status_t Camera2ClientBase<TClientBase>::initialize(sp<CameraProviderManager> manager,
const String8& monitorTags) {
return initializeImpl(manager, monitorTags);
}
template <typename TClientBase>
template <typename TProviderPtr>
status_t Camera2ClientBase<TClientBase>::initializeImpl(TProviderPtr providerPtr) {
status_t Camera2ClientBase<TClientBase>::initializeImpl(TProviderPtr providerPtr,
const String8& monitorTags) {
ATRACE_CALL();
ALOGV("%s: Initializing client for camera %s", __FUNCTION__,
TClientBase::mCameraIdStr.string());
@ -104,7 +106,7 @@ status_t Camera2ClientBase<TClientBase>::initializeImpl(TProviderPtr providerPtr
return NO_INIT;
}
res = mDevice->initialize(providerPtr);
res = mDevice->initialize(providerPtr, monitorTags);
if (res != OK) {
ALOGE("%s: Camera %s: unable to initialize device: %s (%d)",
__FUNCTION__, TClientBase::mCameraIdStr.string(), strerror(-res), res);

@ -56,7 +56,7 @@ public:
int servicePid);
virtual ~Camera2ClientBase();
virtual status_t initialize(sp<CameraProviderManager> manager);
virtual status_t initialize(sp<CameraProviderManager> manager, const String8& monitorTags);
virtual status_t dumpClient(int fd, const Vector<String16>& args);
/**
@ -145,7 +145,7 @@ protected:
private:
template<typename TProviderPtr>
status_t initializeImpl(TProviderPtr providerPtr);
status_t initializeImpl(TProviderPtr providerPtr, const String8& monitorTags);
};
}; // namespace android

@ -60,7 +60,7 @@ class CameraDeviceBase : public virtual RefBase {
*/
virtual metadata_vendor_id_t getVendorTagId() const = 0;
virtual status_t initialize(sp<CameraProviderManager> manager) = 0;
virtual status_t initialize(sp<CameraProviderManager> manager, const String8& monitorTags) = 0;
virtual status_t disconnect() = 0;
virtual status_t dump(int fd, const Vector<String16> &args) = 0;

@ -96,7 +96,7 @@ const String8& Camera3Device::getId() const {
return mId;
}
status_t Camera3Device::initialize(sp<CameraProviderManager> manager) {
status_t Camera3Device::initialize(sp<CameraProviderManager> manager, const String8& monitorTags) {
ATRACE_CALL();
Mutex::Autolock il(mInterfaceLock);
Mutex::Autolock l(mLock);
@ -169,6 +169,10 @@ status_t Camera3Device::initialize(sp<CameraProviderManager> manager) {
mInterface = new HalInterface(session, queue);
std::string providerType;
mVendorTagId = manager->getProviderTagIdLocked(mId.string());
mTagMonitor.initialize(mVendorTagId);
if (!monitorTags.isEmpty()) {
mTagMonitor.parseTagsToMonitor(String8(monitorTags));
}
return initializeCommonLocked();
}
@ -192,8 +196,6 @@ status_t Camera3Device::initializeCommonLocked() {
/** Create buffer manager */
mBufferManager = new Camera3BufferManager();
mTagMonitor.initialize(mVendorTagId);
Vector<int32_t> sessionParamKeys;
camera_metadata_entry_t sessionKeysEntry = mDeviceInfo.find(
ANDROID_REQUEST_AVAILABLE_SESSION_KEYS);
@ -582,13 +584,12 @@ status_t Camera3Device::dump(int fd, const Vector<String16> &args) {
bool dumpTemplates = false;
String16 templatesOption("-t");
String16 monitorOption("-m");
int n = args.size();
for (int i = 0; i < n; i++) {
if (args[i] == templatesOption) {
dumpTemplates = true;
}
if (args[i] == monitorOption) {
if (args[i] == TagMonitor::kMonitorOption) {
if (i + 1 < n) {
String8 monitorTags = String8(args[i + 1]);
if (monitorTags == "off") {

@ -96,7 +96,7 @@ class Camera3Device :
metadata_vendor_id_t getVendorTagId() const override { return mVendorTagId; }
// Transitions to idle state on success.
status_t initialize(sp<CameraProviderManager> manager) override;
status_t initialize(sp<CameraProviderManager> manager, const String8& monitorTags) override;
status_t disconnect() override;
status_t dump(int fd, const Vector<String16> &args) override;
const CameraMetadata& info() const override;

@ -33,6 +33,8 @@ TagMonitor::TagMonitor():
mVendorTagId(CAMERA_METADATA_INVALID_VENDOR_ID)
{}
const String16 TagMonitor::kMonitorOption = String16("-m");
const char* TagMonitor::k3aTags =
"android.control.aeMode, android.control.afMode, android.control.awbMode,"
"android.control.aeState, android.control.afState, android.control.awbState,"

@ -38,6 +38,10 @@ namespace android {
* buffer log that can be dumped at will. */
class TagMonitor {
public:
// Monitor argument
static const String16 kMonitorOption;
enum eventSource {
REQUEST,
RESULT

Loading…
Cancel
Save