Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit c43654c6 authored by Tej Singh's avatar Tej Singh Committed by Automerger Merge Worker
Browse files

Merge "Create manager lib for StatsBootstrapAtomService" am: f1e4354b

Original change: https://android-review.googlesource.com/c/platform/system/core/+/1897202

Change-Id: I7d93a2a09cda8e3d3f0073680836d74b5122c621
parents cfce587a f1e4354b
Loading
Loading
Loading
Loading
+49 −0
Original line number Diff line number Diff line
//
// 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"],
}

+57 −0
Original line number Diff line number Diff line
/*
 * 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
 No newline at end of file
+41 −0
Original line number Diff line number Diff line
/*
 * 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
+37 −0
Original line number Diff line number Diff line
/*
 * 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
 No newline at end of file
+32 −0
Original line number Diff line number Diff line
/*
 * 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
 No newline at end of file