--
-- Copyright 2023 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
--
--     https://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.

-- Some slice names have params in them. This functions removes them to make it
-- possible to aggregate by name.
-- Some examples are:
--  - Lock/monitor contention slices. The name includes where the lock
--    contention is in the code. That part is removed.
--  - DrawFrames/ooFrame. The name also includes the frame number.
--  - Apk/oat/dex loading: The name of the apk is removed
--
-- @arg name STRING   Raw name of the slice
-- @ret STRING        Simplified name.
SELECT CREATE_FUNCTION(
    'ANDROID_STANDARDIZE_SLICE_NAME(name STRING)',
    'STRING',
    '
    SELECT
        CASE
        WHEN $name GLOB "Lock contention on*" THEN "Lock contention on <...>"
        WHEN $name GLOB "monitor contention with*" THEN "monitor contention with <...>"
        WHEN $name GLOB "SuspendThreadByThreadId*" THEN "SuspendThreadByThreadId <...>"
        WHEN $name GLOB "LoadApkAssetsFd*" THEN "LoadApkAssetsFd <...>"
        WHEN $name GLOB "relayoutWindow*" THEN "relayoutWindow <...>"
        WHEN $name GLOB "*CancellableContinuationImpl*" THEN "CoroutineContinuation"
        WHEN $name GLOB "Choreographer#doFrame*" THEN "Choreographer#doFrame"
        WHEN $name GLOB "DrawFrames*" THEN "DrawFrames"
        WHEN $name GLOB "/data/app*.apk" THEN "APK load"
        WHEN $name GLOB "OpenDexFilesFromOat*" THEN "OpenDexFilesFromOat"
        WHEN $name GLOB "Open oat file*" THEN "Open oat file"
        ELSE $name
        END
');