blob: cc77f5b82c90f8eaa2dddadeb9d4ea356a423c18 [file] [log] [blame]
Aurimas Liutikasdc3f8852024-07-11 10:07:48 -07001/*
2 * Copyright (C) 2024 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16package android.os;
17
18import android.annotation.FlaggedApi;
19import android.annotation.NonNull;
20import android.annotation.Nullable;
21import android.annotation.SystemApi;
22import android.annotation.SystemApi.Client;
23
24/**
25 * Provides a way to register and obtain the system service binder objects managed by the profiling
26 * service.
27 *
28 * <p> Only the profiling mainline module will be able to access an instance of this class.
29 * @hide
30 */
31@FlaggedApi(Flags.FLAG_TELEMETRY_APIS_FRAMEWORK_INITIALIZATION)
32@SystemApi(client = Client.MODULE_LIBRARIES)
33public class ProfilingServiceManager {
34
35 /** @hide */
36 public ProfilingServiceManager() {}
37
38 /**
39 * A class that exposes the methods to register and obtain each system service.
40 */
41 public static final class ServiceRegisterer {
42 private final String mServiceName;
43
44 /** @hide */
45 public ServiceRegisterer(String serviceName) {
46 mServiceName = serviceName;
47 }
48
49 /**
50 * Get the system server binding object for ProfilingService.
51 *
52 * <p> This blocks until the service instance is ready.
53 * or a timeout happens, in which case it returns null.
54 */
55 @Nullable
56 public IBinder get() {
57 return ServiceManager.getService(mServiceName);
58 }
59
60 /**
61 * Get the system server binding object for a service.
62 *
63 * <p>This blocks until the service instance is ready,
64 * or a timeout happens, in which case it throws {@link ServiceNotFoundException}.
65 */
66 @Nullable
67 public IBinder getOrThrow() throws ServiceNotFoundException {
68 try {
69 return ServiceManager.getServiceOrThrow(mServiceName);
70 } catch (ServiceManager.ServiceNotFoundException e) {
71 throw new ServiceNotFoundException(mServiceName);
72 }
73 }
74 }
75
76 /**
77 * See {@link ServiceRegisterer#getOrThrow()}
78 */
79 public static class ServiceNotFoundException extends ServiceManager.ServiceNotFoundException {
80 /**
81 * Constructor
82 *
83 * @param name the name of the binder service that cannot be found.
84 */
85 public ServiceNotFoundException(@NonNull String name) {
86 super(name);
87 }
88 }
89
90 /**
91 * Returns {@link ServiceRegisterer} for the "profiling" service.
92 */
93 @NonNull
94 public ServiceRegisterer getProfilingServiceRegisterer() {
95 return new ServiceRegisterer("profiling_service");
96 }
97}