#
# Copyright (C) 2019 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.
#

LIBARTPALETTE_1 { # introduced=31
  global:
    # --- VERSION 01 API ---
    PaletteSchedSetPriority; # apex
    PaletteSchedGetPriority; # apex
    PaletteWriteCrashThreadStacks; # apex
    PaletteTraceEnabled; # apex
    PaletteTraceBegin; # apex
    PaletteTraceEnd; # apex
    PaletteTraceIntegerValue; # apex
    PaletteAshmemCreateRegion; # apex
    PaletteAshmemSetProtRegion; # apex
    PaletteCreateOdrefreshStagingDirectory; # apex
    PaletteShouldReportDex2oatCompilation; # apex
    PaletteNotifyStartDex2oatCompilation; # apex
    PaletteNotifyEndDex2oatCompilation; # apex
    PaletteNotifyDexFileLoaded; # apex
    PaletteNotifyOatFileLoaded; # apex
    PaletteShouldReportJniInvocations; # apex
    PaletteNotifyBeginJniInvocation; # apex
    PaletteNotifyEndJniInvocation; # apex

  local:
    *;
};

LIBARTPALETTE_2 { # introduced=33
  global:
    # --- VERSION 02 API ---
    PaletteReportLockContention; # apex
} LIBARTPALETTE_1;

LIBARTPALETTE_3 { # introduced=34
  global:
    # --- VERSION 03 API ---
    PaletteSetTaskProfiles; # apex
} LIBARTPALETTE_2;
