Merge "Create manager lib for StatsBootstrapAtomService"

This commit is contained in:
Tej Singh 2021-12-14 18:05:14 +00:00 committed by Gerrit Code Review
commit f1e4354b5d
5 changed files with 216 additions and 0 deletions

View file

@ -0,0 +1,49 @@
//
// Copyright (C) 2021 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.
//
// =========================================================================
// Native library that provide a client to StatsBootstrapAtomService.
// This library should only be used by processes that start in the bootstrap namespace.
// All other clients should use libstatssocket, provided by the statsd apex.
// =========================================================================
package {
default_applicable_licenses: ["Android-Apache-2.0"],
}
cc_defaults {
name: "libstatsbootstrap_defaults",
srcs: [
"BootstrapClientInternal.cpp",
"StatsBootstrapAtomClient.cpp",
],
cflags: [
"-Wall",
"-Werror",
],
shared_libs: [
"libbinder",
"libutils",
"android.os.statsbootstrap_aidl-cpp",
],
}
cc_library {
name: "libstatsbootstrap",
defaults: ["libstatsbootstrap_defaults"],
export_include_dirs: ["include"],
}

View file

@ -0,0 +1,57 @@
/*
* Copyright (C) 2021 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 "BootstrapClientInternal.h"
#include <binder/IServiceManager.h>
namespace android {
namespace os {
namespace stats {
sp<BootstrapClientInternal> BootstrapClientInternal::getInstance() {
static sp<BootstrapClientInternal> client = new BootstrapClientInternal();
return client;
}
sp<IStatsBootstrapAtomService> BootstrapClientInternal::getServiceNonBlocking() {
std::lock_guard<std::mutex> lock(mLock);
if (mService != nullptr) {
return mService;
}
connectNonBlockingLocked();
return mService;
}
void BootstrapClientInternal::binderDied(const wp<IBinder>&) {
std::lock_guard<std::mutex> lock(mLock);
mService = nullptr;
connectNonBlockingLocked();
}
void BootstrapClientInternal::connectNonBlockingLocked() {
const String16 name("statsbootstrap");
mService =
interface_cast<IStatsBootstrapAtomService>(defaultServiceManager()->checkService(name));
if (mService != nullptr) {
// Set up binder death.
IInterface::asBinder(mService)->linkToDeath(this);
}
}
} // namespace stats
} // namespace os
} // namespace android

View file

@ -0,0 +1,41 @@
/*
* Copyright (C) 2021 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.
*/
#pragma once
#include <android/os/IStatsBootstrapAtomService.h>
namespace android {
namespace os {
namespace stats {
class BootstrapClientInternal : public IBinder::DeathRecipient {
public:
static sp<BootstrapClientInternal> getInstance();
void binderDied(const wp<IBinder>& who) override;
sp<IStatsBootstrapAtomService> getServiceNonBlocking();
private:
BootstrapClientInternal() {}
void connectNonBlockingLocked();
mutable std::mutex mLock;
sp<IStatsBootstrapAtomService> mService;
};
} // namespace stats
} // namespace os
} // namespace android

View file

@ -0,0 +1,37 @@
/*
* Copyright (C) 2021 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 "include/StatsBootstrapAtomClient.h"
#include <android/os/IStatsBootstrapAtomService.h>
#include "BootstrapClientInternal.h"
namespace android {
namespace os {
namespace stats {
bool StatsBootstrapAtomClient::reportBootstrapAtom(const StatsBootstrapAtom& atom) {
sp<IStatsBootstrapAtomService> service =
BootstrapClientInternal::getInstance()->getServiceNonBlocking();
if (service == nullptr) {
return false;
}
return service->reportBootstrapAtom(atom).isOk();
}
} // namespace stats
} // namespace os
} // namespace android

View file

@ -0,0 +1,32 @@
/*
* Copyright (C) 2021 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.
*/
#pragma once
#include <android/os/StatsBootstrapAtom.h>
namespace android {
namespace os {
namespace stats {
class StatsBootstrapAtomClient {
public:
static bool reportBootstrapAtom(const StatsBootstrapAtom& atom);
};
} // namespace stats
} // namespace os
} // namespace android