179 lines
5.6 KiB
C
179 lines
5.6 KiB
C
/*
|
|
* Copyright (C) 2020 Xiaomi Corporation
|
|
*
|
|
* 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.
|
|
*/
|
|
|
|
/****************************************************************************
|
|
* Included Files
|
|
****************************************************************************/
|
|
|
|
#include <stdint.h>
|
|
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
#include <string.h>
|
|
|
|
#include <cutils/trace.h>
|
|
|
|
/****************************************************************************
|
|
* Private Types
|
|
****************************************************************************/
|
|
|
|
struct atrace_category {
|
|
uint64_t tag;
|
|
const char* name;
|
|
const char* help;
|
|
};
|
|
|
|
/****************************************************************************
|
|
* Private Data
|
|
****************************************************************************/
|
|
|
|
static const struct atrace_category category_list[] = {
|
|
{ ATRACE_TAG_NEVER, "never", "never output trace" },
|
|
{ ATRACE_TAG_ALWAYS, "always", "always output trace" },
|
|
{ ATRACE_TAG_GRAPHICS, "gfx", "graphics" },
|
|
{ ATRACE_TAG_INPUT, "input", "input" },
|
|
{ ATRACE_TAG_VIEW, "view", "view" },
|
|
{ ATRACE_TAG_WEBVIEW, "webview", "webview" },
|
|
{ ATRACE_TAG_WINDOW_MANAGER, "wm", "window_manager" },
|
|
{ ATRACE_TAG_ACTIVITY_MANAGER, "am", "activity_manager" },
|
|
{ ATRACE_TAG_SYNC_MANAGER, "sm", "sync_manager" },
|
|
{ ATRACE_TAG_AUDIO, "audio", "audio" },
|
|
{ ATRACE_TAG_VIDEO, "video", "video" },
|
|
{ ATRACE_TAG_CAMERA, "camera", "camera" },
|
|
{ ATRACE_TAG_HAL, "hal", "hal" },
|
|
{ ATRACE_TAG_APP, "app", "app" },
|
|
{ ATRACE_TAG_RESOURCES, "res", "resources" },
|
|
{ ATRACE_TAG_DALVIK, "dalvik", "dalvik" },
|
|
{ ATRACE_TAG_RS, "rs", "rs" },
|
|
{ ATRACE_TAG_BIONIC, "bionic", "bionic" },
|
|
{ ATRACE_TAG_POWER, "power", "power" },
|
|
{ ATRACE_TAG_PACKAGE_MANAGER, "pm", "package_manager" },
|
|
{ ATRACE_TAG_SYSTEM_SERVER, "ss", "system_server" },
|
|
{ ATRACE_TAG_DATABASE, "db", "database" },
|
|
{ ATRACE_TAG_NETWORK, "net", "network" },
|
|
{ ATRACE_TAG_ADB, "adb", "adb" },
|
|
{ ATRACE_TAG_VIBRATOR, "vibrator", "vibrator" },
|
|
{ ATRACE_TAG_AIDL, "aidl", "aidl" },
|
|
{ ATRACE_TAG_NNAPI, "nnapi", "nnapi" },
|
|
{ ATRACE_TAG_RRO, "rro", "rro" },
|
|
{ ATRACE_TAG_THERMAL, "thermal", "thermal" },
|
|
};
|
|
|
|
/****************************************************************************
|
|
* Private Functions
|
|
****************************************************************************/
|
|
|
|
/****************************************************************************
|
|
* atrace_help
|
|
****************************************************************************/
|
|
|
|
static int atrace_help(const char* progname)
|
|
{
|
|
printf("Usage: %s [option] [categories...]\n"
|
|
"options include:\n"
|
|
" --list_categories\n"
|
|
" list the available tracing categories\n",
|
|
progname);
|
|
|
|
return 0;
|
|
}
|
|
|
|
/****************************************************************************
|
|
* atrace_list
|
|
*
|
|
* Description:
|
|
* List all available categories
|
|
*
|
|
****************************************************************************/
|
|
|
|
static int atrace_list(void)
|
|
{
|
|
int i;
|
|
printf("Available categories:\n");
|
|
for (i = 0; i < sizeof(category_list) / sizeof(category_list[0]); i++) {
|
|
printf("\t%s: %s\n", category_list[i].name, category_list[i].help);
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
/****************************************************************************
|
|
* atrace_category
|
|
*
|
|
* Description:
|
|
* Update tracing tag
|
|
*
|
|
****************************************************************************/
|
|
|
|
static int atrace_category(int argc, char** argv)
|
|
{
|
|
int i;
|
|
int j;
|
|
uint64_t tag = 0;
|
|
|
|
for (i = 1; i < argc; i++) {
|
|
if (strcmp(argv[i], "always") == 0) {
|
|
tag = UINT64_MAX;
|
|
} else if (strcmp(argv[i], "never") == 0) {
|
|
tag = 0ull;
|
|
} else {
|
|
for (j = 2; j < sizeof(category_list) / sizeof(category_list[0]); j++) {
|
|
if (strcmp(argv[i], category_list[j].name) == 0) {
|
|
tag |= category_list[j].tag;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
if (j == sizeof(category_list) / sizeof(category_list[0])) {
|
|
printf("Unknown category: %s", argv[i]);
|
|
return -EINVAL;
|
|
}
|
|
}
|
|
|
|
atrace_enabled_tags = tag;
|
|
printf("Android tracing enabled with tag: %#" PRIx64 "\n", tag);
|
|
return OK;
|
|
}
|
|
|
|
/****************************************************************************
|
|
* Public Functions
|
|
****************************************************************************/
|
|
|
|
/****************************************************************************
|
|
* Name: main
|
|
*
|
|
* Description:
|
|
* This is the main entry point for the atrace command.
|
|
*
|
|
****************************************************************************/
|
|
|
|
int main(int argc, char** argv)
|
|
{
|
|
int ret;
|
|
if (argc < 2) {
|
|
atrace_help(argv[0]);
|
|
return EXIT_FAILURE;
|
|
}
|
|
|
|
if (strcmp(argv[1], "--list_categories") == 0) {
|
|
ret = atrace_list();
|
|
} else {
|
|
ret = atrace_category(argc, argv);
|
|
}
|
|
|
|
return ret;
|
|
}
|