1*40dae23fSAndroid Build Coastguard Worker /*
2*40dae23fSAndroid Build Coastguard Worker * Copyright (C) 2019 The Android Open Source Project
3*40dae23fSAndroid Build Coastguard Worker *
4*40dae23fSAndroid Build Coastguard Worker * Licensed under the Apache License, Version 2.0 (the "License");
5*40dae23fSAndroid Build Coastguard Worker * you may not use this file except in compliance with the License.
6*40dae23fSAndroid Build Coastguard Worker * You may obtain a copy of the License at
7*40dae23fSAndroid Build Coastguard Worker *
8*40dae23fSAndroid Build Coastguard Worker * http://www.apache.org/licenses/LICENSE-2.0
9*40dae23fSAndroid Build Coastguard Worker *
10*40dae23fSAndroid Build Coastguard Worker * Unless required by applicable law or agreed to in writing, software
11*40dae23fSAndroid Build Coastguard Worker * distributed under the License is distributed on an "AS IS" BASIS,
12*40dae23fSAndroid Build Coastguard Worker * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13*40dae23fSAndroid Build Coastguard Worker * See the License for the specific language governing permissions and
14*40dae23fSAndroid Build Coastguard Worker * limitations under the License.
15*40dae23fSAndroid Build Coastguard Worker */
16*40dae23fSAndroid Build Coastguard Worker
17*40dae23fSAndroid Build Coastguard Worker #include "palette/palette.h"
18*40dae23fSAndroid Build Coastguard Worker
19*40dae23fSAndroid Build Coastguard Worker #include <stdbool.h>
20*40dae23fSAndroid Build Coastguard Worker
21*40dae23fSAndroid Build Coastguard Worker #include <map>
22*40dae23fSAndroid Build Coastguard Worker #include <mutex>
23*40dae23fSAndroid Build Coastguard Worker
24*40dae23fSAndroid Build Coastguard Worker #include <android-base/logging.h>
25*40dae23fSAndroid Build Coastguard Worker #include <android-base/macros.h> // For ATTRIBUTE_UNUSED
26*40dae23fSAndroid Build Coastguard Worker
27*40dae23fSAndroid Build Coastguard Worker #include "palette_system.h"
28*40dae23fSAndroid Build Coastguard Worker
29*40dae23fSAndroid Build Coastguard Worker // Cached thread priority for testing. No thread priorities are ever affected.
30*40dae23fSAndroid Build Coastguard Worker static std::mutex g_tid_priority_map_mutex;
31*40dae23fSAndroid Build Coastguard Worker static std::map<int32_t, int32_t> g_tid_priority_map;
32*40dae23fSAndroid Build Coastguard Worker
33*40dae23fSAndroid Build Coastguard Worker // Unless explicitly mentioned otherwise, the following methods have been
34*40dae23fSAndroid Build Coastguard Worker // introduced in version 1 API, corresponding to SDK level 31.
35*40dae23fSAndroid Build Coastguard Worker
PaletteSchedSetPriority(int32_t tid,int32_t priority)36*40dae23fSAndroid Build Coastguard Worker palette_status_t PaletteSchedSetPriority(int32_t tid, int32_t priority) {
37*40dae23fSAndroid Build Coastguard Worker if (priority < art::palette::kMinManagedThreadPriority ||
38*40dae23fSAndroid Build Coastguard Worker priority > art::palette::kMaxManagedThreadPriority) {
39*40dae23fSAndroid Build Coastguard Worker return PALETTE_STATUS_INVALID_ARGUMENT;
40*40dae23fSAndroid Build Coastguard Worker }
41*40dae23fSAndroid Build Coastguard Worker std::lock_guard guard(g_tid_priority_map_mutex);
42*40dae23fSAndroid Build Coastguard Worker g_tid_priority_map[tid] = priority;
43*40dae23fSAndroid Build Coastguard Worker return PALETTE_STATUS_OK;
44*40dae23fSAndroid Build Coastguard Worker }
45*40dae23fSAndroid Build Coastguard Worker
PaletteSchedGetPriority(int32_t tid,int32_t * priority)46*40dae23fSAndroid Build Coastguard Worker palette_status_t PaletteSchedGetPriority(int32_t tid,
47*40dae23fSAndroid Build Coastguard Worker /*out*/ int32_t* priority) {
48*40dae23fSAndroid Build Coastguard Worker std::lock_guard guard(g_tid_priority_map_mutex);
49*40dae23fSAndroid Build Coastguard Worker if (g_tid_priority_map.find(tid) == g_tid_priority_map.end()) {
50*40dae23fSAndroid Build Coastguard Worker g_tid_priority_map[tid] = art::palette::kNormalManagedThreadPriority;
51*40dae23fSAndroid Build Coastguard Worker }
52*40dae23fSAndroid Build Coastguard Worker *priority = g_tid_priority_map[tid];
53*40dae23fSAndroid Build Coastguard Worker return PALETTE_STATUS_OK;
54*40dae23fSAndroid Build Coastguard Worker }
55*40dae23fSAndroid Build Coastguard Worker
PaletteWriteCrashThreadStacks(const char * stacks,size_t stacks_len)56*40dae23fSAndroid Build Coastguard Worker palette_status_t PaletteWriteCrashThreadStacks(/*in*/ const char* stacks, size_t stacks_len) {
57*40dae23fSAndroid Build Coastguard Worker LOG(INFO) << std::string_view(stacks, stacks_len);
58*40dae23fSAndroid Build Coastguard Worker return PALETTE_STATUS_OK;
59*40dae23fSAndroid Build Coastguard Worker }
60*40dae23fSAndroid Build Coastguard Worker
PaletteTraceEnabled(bool * enabled)61*40dae23fSAndroid Build Coastguard Worker palette_status_t PaletteTraceEnabled(/*out*/ bool* enabled) {
62*40dae23fSAndroid Build Coastguard Worker *enabled = false;
63*40dae23fSAndroid Build Coastguard Worker return PALETTE_STATUS_OK;
64*40dae23fSAndroid Build Coastguard Worker }
65*40dae23fSAndroid Build Coastguard Worker
PaletteTraceBegin(const char * name ATTRIBUTE_UNUSED)66*40dae23fSAndroid Build Coastguard Worker palette_status_t PaletteTraceBegin(const char* name ATTRIBUTE_UNUSED) {
67*40dae23fSAndroid Build Coastguard Worker return PALETTE_STATUS_OK;
68*40dae23fSAndroid Build Coastguard Worker }
69*40dae23fSAndroid Build Coastguard Worker
PaletteTraceEnd()70*40dae23fSAndroid Build Coastguard Worker palette_status_t PaletteTraceEnd() {
71*40dae23fSAndroid Build Coastguard Worker return PALETTE_STATUS_OK;
72*40dae23fSAndroid Build Coastguard Worker }
73*40dae23fSAndroid Build Coastguard Worker
PaletteTraceIntegerValue(const char * name ATTRIBUTE_UNUSED,int32_t value ATTRIBUTE_UNUSED)74*40dae23fSAndroid Build Coastguard Worker palette_status_t PaletteTraceIntegerValue(const char* name ATTRIBUTE_UNUSED,
75*40dae23fSAndroid Build Coastguard Worker int32_t value ATTRIBUTE_UNUSED) {
76*40dae23fSAndroid Build Coastguard Worker return PALETTE_STATUS_OK;
77*40dae23fSAndroid Build Coastguard Worker }
78*40dae23fSAndroid Build Coastguard Worker
PaletteAshmemCreateRegion(const char * name ATTRIBUTE_UNUSED,size_t size ATTRIBUTE_UNUSED,int * fd)79*40dae23fSAndroid Build Coastguard Worker palette_status_t PaletteAshmemCreateRegion(const char* name ATTRIBUTE_UNUSED,
80*40dae23fSAndroid Build Coastguard Worker size_t size ATTRIBUTE_UNUSED, int* fd) {
81*40dae23fSAndroid Build Coastguard Worker *fd = -1;
82*40dae23fSAndroid Build Coastguard Worker return PALETTE_STATUS_NOT_SUPPORTED;
83*40dae23fSAndroid Build Coastguard Worker }
84*40dae23fSAndroid Build Coastguard Worker
PaletteAshmemSetProtRegion(int fd ATTRIBUTE_UNUSED,int prot ATTRIBUTE_UNUSED)85*40dae23fSAndroid Build Coastguard Worker palette_status_t PaletteAshmemSetProtRegion(int fd ATTRIBUTE_UNUSED, int prot ATTRIBUTE_UNUSED) {
86*40dae23fSAndroid Build Coastguard Worker return PALETTE_STATUS_NOT_SUPPORTED;
87*40dae23fSAndroid Build Coastguard Worker }
88*40dae23fSAndroid Build Coastguard Worker
PaletteCreateOdrefreshStagingDirectory(const char ** staging_dir)89*40dae23fSAndroid Build Coastguard Worker palette_status_t PaletteCreateOdrefreshStagingDirectory(const char** staging_dir) {
90*40dae23fSAndroid Build Coastguard Worker *staging_dir = nullptr;
91*40dae23fSAndroid Build Coastguard Worker return PALETTE_STATUS_NOT_SUPPORTED;
92*40dae23fSAndroid Build Coastguard Worker }
93*40dae23fSAndroid Build Coastguard Worker
PaletteShouldReportDex2oatCompilation(bool * value)94*40dae23fSAndroid Build Coastguard Worker palette_status_t PaletteShouldReportDex2oatCompilation(bool* value) {
95*40dae23fSAndroid Build Coastguard Worker *value = false;
96*40dae23fSAndroid Build Coastguard Worker return PALETTE_STATUS_OK;
97*40dae23fSAndroid Build Coastguard Worker }
98*40dae23fSAndroid Build Coastguard Worker
PaletteNotifyStartDex2oatCompilation(int source_fd ATTRIBUTE_UNUSED,int art_fd ATTRIBUTE_UNUSED,int oat_fd ATTRIBUTE_UNUSED,int vdex_fd ATTRIBUTE_UNUSED)99*40dae23fSAndroid Build Coastguard Worker palette_status_t PaletteNotifyStartDex2oatCompilation(int source_fd ATTRIBUTE_UNUSED,
100*40dae23fSAndroid Build Coastguard Worker int art_fd ATTRIBUTE_UNUSED,
101*40dae23fSAndroid Build Coastguard Worker int oat_fd ATTRIBUTE_UNUSED,
102*40dae23fSAndroid Build Coastguard Worker int vdex_fd ATTRIBUTE_UNUSED) {
103*40dae23fSAndroid Build Coastguard Worker return PALETTE_STATUS_OK;
104*40dae23fSAndroid Build Coastguard Worker }
105*40dae23fSAndroid Build Coastguard Worker
PaletteNotifyEndDex2oatCompilation(int source_fd ATTRIBUTE_UNUSED,int art_fd ATTRIBUTE_UNUSED,int oat_fd ATTRIBUTE_UNUSED,int vdex_fd ATTRIBUTE_UNUSED)106*40dae23fSAndroid Build Coastguard Worker palette_status_t PaletteNotifyEndDex2oatCompilation(int source_fd ATTRIBUTE_UNUSED,
107*40dae23fSAndroid Build Coastguard Worker int art_fd ATTRIBUTE_UNUSED,
108*40dae23fSAndroid Build Coastguard Worker int oat_fd ATTRIBUTE_UNUSED,
109*40dae23fSAndroid Build Coastguard Worker int vdex_fd ATTRIBUTE_UNUSED) {
110*40dae23fSAndroid Build Coastguard Worker return PALETTE_STATUS_OK;
111*40dae23fSAndroid Build Coastguard Worker }
112*40dae23fSAndroid Build Coastguard Worker
PaletteNotifyDexFileLoaded(const char * path ATTRIBUTE_UNUSED)113*40dae23fSAndroid Build Coastguard Worker palette_status_t PaletteNotifyDexFileLoaded(const char* path ATTRIBUTE_UNUSED) {
114*40dae23fSAndroid Build Coastguard Worker return PALETTE_STATUS_OK;
115*40dae23fSAndroid Build Coastguard Worker }
116*40dae23fSAndroid Build Coastguard Worker
PaletteNotifyOatFileLoaded(const char * path ATTRIBUTE_UNUSED)117*40dae23fSAndroid Build Coastguard Worker palette_status_t PaletteNotifyOatFileLoaded(const char* path ATTRIBUTE_UNUSED) {
118*40dae23fSAndroid Build Coastguard Worker return PALETTE_STATUS_OK;
119*40dae23fSAndroid Build Coastguard Worker }
120*40dae23fSAndroid Build Coastguard Worker
PaletteShouldReportJniInvocations(bool * value)121*40dae23fSAndroid Build Coastguard Worker palette_status_t PaletteShouldReportJniInvocations(bool* value) {
122*40dae23fSAndroid Build Coastguard Worker *value = false;
123*40dae23fSAndroid Build Coastguard Worker return PALETTE_STATUS_OK;
124*40dae23fSAndroid Build Coastguard Worker }
125*40dae23fSAndroid Build Coastguard Worker
PaletteNotifyBeginJniInvocation(JNIEnv * env ATTRIBUTE_UNUSED)126*40dae23fSAndroid Build Coastguard Worker palette_status_t PaletteNotifyBeginJniInvocation(JNIEnv* env ATTRIBUTE_UNUSED) {
127*40dae23fSAndroid Build Coastguard Worker return PALETTE_STATUS_OK;
128*40dae23fSAndroid Build Coastguard Worker }
129*40dae23fSAndroid Build Coastguard Worker
PaletteNotifyEndJniInvocation(JNIEnv * env ATTRIBUTE_UNUSED)130*40dae23fSAndroid Build Coastguard Worker palette_status_t PaletteNotifyEndJniInvocation(JNIEnv* env ATTRIBUTE_UNUSED) {
131*40dae23fSAndroid Build Coastguard Worker return PALETTE_STATUS_OK;
132*40dae23fSAndroid Build Coastguard Worker }
133*40dae23fSAndroid Build Coastguard Worker
134*40dae23fSAndroid Build Coastguard Worker // Introduced in version 2 API, corresponding to SDK level 33.
PaletteReportLockContention(JNIEnv * env ATTRIBUTE_UNUSED,int32_t wait_ms ATTRIBUTE_UNUSED,const char * filename ATTRIBUTE_UNUSED,int32_t line_number ATTRIBUTE_UNUSED,const char * method_name ATTRIBUTE_UNUSED,const char * owner_filename ATTRIBUTE_UNUSED,int32_t owner_line_number ATTRIBUTE_UNUSED,const char * owner_method_name ATTRIBUTE_UNUSED,const char * proc_name ATTRIBUTE_UNUSED,const char * thread_name ATTRIBUTE_UNUSED)135*40dae23fSAndroid Build Coastguard Worker palette_status_t PaletteReportLockContention(
136*40dae23fSAndroid Build Coastguard Worker JNIEnv* env ATTRIBUTE_UNUSED, int32_t wait_ms ATTRIBUTE_UNUSED,
137*40dae23fSAndroid Build Coastguard Worker const char* filename ATTRIBUTE_UNUSED, int32_t line_number ATTRIBUTE_UNUSED,
138*40dae23fSAndroid Build Coastguard Worker const char* method_name ATTRIBUTE_UNUSED, const char* owner_filename ATTRIBUTE_UNUSED,
139*40dae23fSAndroid Build Coastguard Worker int32_t owner_line_number ATTRIBUTE_UNUSED, const char* owner_method_name ATTRIBUTE_UNUSED,
140*40dae23fSAndroid Build Coastguard Worker const char* proc_name ATTRIBUTE_UNUSED, const char* thread_name ATTRIBUTE_UNUSED) {
141*40dae23fSAndroid Build Coastguard Worker return PALETTE_STATUS_OK;
142*40dae23fSAndroid Build Coastguard Worker }
143*40dae23fSAndroid Build Coastguard Worker
144*40dae23fSAndroid Build Coastguard Worker // Introduced in version 3 API, corresponding to SDK level 34.
PaletteSetTaskProfiles(int32_t tid ATTRIBUTE_UNUSED,const char * const profiles[]ATTRIBUTE_UNUSED,size_t profiles_len ATTRIBUTE_UNUSED)145*40dae23fSAndroid Build Coastguard Worker palette_status_t PaletteSetTaskProfiles(int32_t tid ATTRIBUTE_UNUSED,
146*40dae23fSAndroid Build Coastguard Worker const char* const profiles[] ATTRIBUTE_UNUSED,
147*40dae23fSAndroid Build Coastguard Worker size_t profiles_len ATTRIBUTE_UNUSED) {
148*40dae23fSAndroid Build Coastguard Worker return PALETTE_STATUS_OK;
149*40dae23fSAndroid Build Coastguard Worker }
150*40dae23fSAndroid Build Coastguard Worker
151*40dae23fSAndroid Build Coastguard Worker // Introduced in version 4 API, corresponding to SDK level 36.
PaletteDebugStoreGetString(char * result ATTRIBUTE_UNUSED,size_t max_size ATTRIBUTE_UNUSED)152*40dae23fSAndroid Build Coastguard Worker palette_status_t PaletteDebugStoreGetString(char* result ATTRIBUTE_UNUSED,
153*40dae23fSAndroid Build Coastguard Worker size_t max_size ATTRIBUTE_UNUSED) {
154*40dae23fSAndroid Build Coastguard Worker result[0] = '\0';
155*40dae23fSAndroid Build Coastguard Worker return PALETTE_STATUS_OK;
156*40dae23fSAndroid Build Coastguard Worker }