Cleanup Binder interface between sensorservice and BatteryStats
Change-Id: Ia507160a2534059afe93849c8efc8407a046b50e
This commit is contained in:
parent
b5e4762129
commit
63ff1c644f
55
include/binder/IBatteryStats.h
Normal file
55
include/binder/IBatteryStats.h
Normal file
@ -0,0 +1,55 @@
|
||||
/*
|
||||
* 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 ANDROID_IBATTERYSTATS_H
|
||||
#define ANDROID_IBATTERYSTATS_H
|
||||
|
||||
#include <binder/IInterface.h>
|
||||
|
||||
namespace android {
|
||||
|
||||
// ----------------------------------------------------------------------
|
||||
|
||||
class IBatteryStats : public IInterface
|
||||
{
|
||||
public:
|
||||
DECLARE_META_INTERFACE(BatteryStats);
|
||||
|
||||
virtual void noteStartSensor(int uid, int sensor) = 0;
|
||||
virtual void noteStopSensor(int uid, int sensor) = 0;
|
||||
|
||||
enum {
|
||||
NOTE_START_SENSOR_TRANSACTION = IBinder::FIRST_CALL_TRANSACTION,
|
||||
NOTE_STOP_SENSOR_TRANSACTION,
|
||||
};
|
||||
};
|
||||
|
||||
// ----------------------------------------------------------------------
|
||||
|
||||
class BnBatteryStats : public BnInterface<IBatteryStats>
|
||||
{
|
||||
public:
|
||||
virtual status_t onTransact( uint32_t code,
|
||||
const Parcel& data,
|
||||
Parcel* reply,
|
||||
uint32_t flags = 0);
|
||||
};
|
||||
|
||||
// ----------------------------------------------------------------------
|
||||
|
||||
}; // namespace android
|
||||
|
||||
#endif // ANDROID_IBATTERYSTATS_H
|
@ -21,6 +21,7 @@ sources := \
|
||||
Debug.cpp \
|
||||
IAppOpsCallback.cpp \
|
||||
IAppOpsService.cpp \
|
||||
IBatteryStats.cpp \
|
||||
IInterface.cpp \
|
||||
IMemory.cpp \
|
||||
IPCThreadState.cpp \
|
||||
|
84
libs/binder/IBatteryStats.cpp
Normal file
84
libs/binder/IBatteryStats.cpp
Normal file
@ -0,0 +1,84 @@
|
||||
/*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
#include <binder/IBatteryStats.h>
|
||||
|
||||
#include <utils/Debug.h>
|
||||
#include <utils/Log.h>
|
||||
#include <binder/Parcel.h>
|
||||
#include <utils/String8.h>
|
||||
|
||||
#include <private/binder/Static.h>
|
||||
|
||||
namespace android {
|
||||
|
||||
// ----------------------------------------------------------------------
|
||||
|
||||
class BpBatteryStats : public BpInterface<IBatteryStats>
|
||||
{
|
||||
public:
|
||||
BpBatteryStats(const sp<IBinder>& impl)
|
||||
: BpInterface<IBatteryStats>(impl)
|
||||
{
|
||||
}
|
||||
|
||||
virtual void noteStartSensor(int uid, int sensor) {
|
||||
Parcel data, reply;
|
||||
data.writeInterfaceToken(IBatteryStats::getInterfaceDescriptor());
|
||||
data.writeInt32(uid);
|
||||
data.writeInt32(sensor);
|
||||
remote()->transact(NOTE_START_SENSOR_TRANSACTION, data, &reply);
|
||||
}
|
||||
|
||||
virtual void noteStopSensor(int uid, int sensor) {
|
||||
Parcel data, reply;
|
||||
data.writeInterfaceToken(IBatteryStats::getInterfaceDescriptor());
|
||||
data.writeInt32(uid);
|
||||
data.writeInt32(sensor);
|
||||
remote()->transact(NOTE_STOP_SENSOR_TRANSACTION, data, &reply);
|
||||
}
|
||||
};
|
||||
|
||||
IMPLEMENT_META_INTERFACE(BatteryStats, "com.android.internal.app.IBatteryStats");
|
||||
|
||||
// ----------------------------------------------------------------------
|
||||
|
||||
status_t BnBatteryStats::onTransact(
|
||||
uint32_t code, const Parcel& data, Parcel* reply, uint32_t flags)
|
||||
{
|
||||
switch(code) {
|
||||
case NOTE_START_SENSOR_TRANSACTION: {
|
||||
CHECK_INTERFACE(IBatteryStats, data, reply);
|
||||
int uid = data.readInt32();
|
||||
int sensor = data.readInt32();
|
||||
noteStartSensor(uid, sensor);
|
||||
reply->writeNoException();
|
||||
return NO_ERROR;
|
||||
} break;
|
||||
case NOTE_STOP_SENSOR_TRANSACTION: {
|
||||
CHECK_INTERFACE(IBatteryStats, data, reply);
|
||||
int uid = data.readInt32();
|
||||
int sensor = data.readInt32();
|
||||
noteStopSensor(uid, sensor);
|
||||
reply->writeNoException();
|
||||
return NO_ERROR;
|
||||
} break;
|
||||
default:
|
||||
return BBinder::onTransact(code, data, reply, flags);
|
||||
}
|
||||
}
|
||||
|
||||
}; // namespace android
|
@ -34,32 +34,10 @@ BatteryService::BatteryService() {
|
||||
const sp<IServiceManager> sm(defaultServiceManager());
|
||||
if (sm != NULL) {
|
||||
const String16 name("batterystats");
|
||||
mBatteryStatService = sm->getService(name);
|
||||
mBatteryStatService = interface_cast<IBatteryStats>(sm->getService(name));
|
||||
}
|
||||
}
|
||||
|
||||
status_t BatteryService::noteStartSensor(int uid, int handle) {
|
||||
Parcel data, reply;
|
||||
data.writeInterfaceToken(DESCRIPTOR);
|
||||
data.writeInt32(uid);
|
||||
data.writeInt32(handle);
|
||||
status_t err = mBatteryStatService->transact(
|
||||
TRANSACTION_noteStartSensor, data, &reply, 0);
|
||||
err = reply.readExceptionCode();
|
||||
return err;
|
||||
}
|
||||
|
||||
status_t BatteryService::noteStopSensor(int uid, int handle) {
|
||||
Parcel data, reply;
|
||||
data.writeInterfaceToken(DESCRIPTOR);
|
||||
data.writeInt32(uid);
|
||||
data.writeInt32(handle);
|
||||
status_t err = mBatteryStatService->transact(
|
||||
TRANSACTION_noteStopSensor, data, &reply, 0);
|
||||
err = reply.readExceptionCode();
|
||||
return err;
|
||||
}
|
||||
|
||||
bool BatteryService::addSensor(uid_t uid, int handle) {
|
||||
Mutex::Autolock _l(mActivationsLock);
|
||||
Info key(uid, handle);
|
||||
@ -86,7 +64,7 @@ void BatteryService::enableSensorImpl(uid_t uid, int handle) {
|
||||
if (mBatteryStatService != 0) {
|
||||
if (addSensor(uid, handle)) {
|
||||
int64_t identity = IPCThreadState::self()->clearCallingIdentity();
|
||||
noteStartSensor(uid, handle);
|
||||
mBatteryStatService->noteStartSensor(uid, handle);
|
||||
IPCThreadState::self()->restoreCallingIdentity(identity);
|
||||
}
|
||||
}
|
||||
@ -95,7 +73,7 @@ void BatteryService::disableSensorImpl(uid_t uid, int handle) {
|
||||
if (mBatteryStatService != 0) {
|
||||
if (removeSensor(uid, handle)) {
|
||||
int64_t identity = IPCThreadState::self()->clearCallingIdentity();
|
||||
noteStopSensor(uid, handle);
|
||||
mBatteryStatService->noteStopSensor(uid, handle);
|
||||
IPCThreadState::self()->restoreCallingIdentity(identity);
|
||||
}
|
||||
}
|
||||
@ -108,7 +86,7 @@ void BatteryService::cleanupImpl(uid_t uid) {
|
||||
for (ssize_t i=0 ; i<mActivations.size() ; i++) {
|
||||
const Info& info(mActivations[i]);
|
||||
if (info.uid == uid) {
|
||||
noteStopSensor(info.uid, info.handle);
|
||||
mBatteryStatService->noteStopSensor(info.uid, info.handle);
|
||||
mActivations.removeAt(i);
|
||||
i--;
|
||||
}
|
||||
@ -117,8 +95,6 @@ void BatteryService::cleanupImpl(uid_t uid) {
|
||||
}
|
||||
}
|
||||
|
||||
const String16 BatteryService::DESCRIPTOR("com.android.internal.app.IBatteryStats");
|
||||
|
||||
ANDROID_SINGLETON_STATIC_INSTANCE(BatteryService)
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
|
@ -17,22 +17,18 @@
|
||||
#include <stdint.h>
|
||||
#include <sys/types.h>
|
||||
|
||||
#include <binder/IBatteryStats.h>
|
||||
#include <utils/Singleton.h>
|
||||
|
||||
namespace android {
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
class BatteryService : public Singleton<BatteryService> {
|
||||
static const int TRANSACTION_noteStartSensor = IBinder::FIRST_CALL_TRANSACTION + 3;
|
||||
static const int TRANSACTION_noteStopSensor = IBinder::FIRST_CALL_TRANSACTION + 4;
|
||||
static const String16 DESCRIPTOR;
|
||||
|
||||
friend class Singleton<BatteryService>;
|
||||
sp<IBinder> mBatteryStatService;
|
||||
sp<IBatteryStats> mBatteryStatService;
|
||||
|
||||
BatteryService();
|
||||
status_t noteStartSensor(int uid, int handle);
|
||||
status_t noteStopSensor(int uid, int handle);
|
||||
|
||||
void enableSensorImpl(uid_t uid, int handle);
|
||||
void disableSensorImpl(uid_t uid, int handle);
|
||||
|
Loading…
Reference in New Issue
Block a user