| /* |
| * Copyright (C) 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 |
| * |
| * 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. |
| */ |
| |
| syntax = "proto2"; |
| package perfetto.protos; |
| |
| // Proto definition based on the Thread_v2 CSwitch class definition |
| // See: https://learn.microsoft.com/en-us/windows/win32/etw/cswitch |
| message CSwitchEtwEvent { |
| // New thread ID after the switch. |
| optional uint32 new_thread_id = 1; |
| |
| // Previous thread ID. |
| optional uint32 old_thread_id = 2; |
| |
| // Thread priority of the new thread. |
| optional sint32 new_thread_priority = 3; |
| |
| // Thread priority of the previous thread. |
| optional sint32 old_thread_priority = 4; |
| |
| // The index of the C-state that was last used by the processor. A value of 0 |
| // represents the lightest idle state with higher values representing deeper |
| // C-states. |
| optional uint32 previous_c_state = 5; |
| |
| // Wait reason for the previous thread. The ordering is important as based on |
| // the OldThreadWaitReason definition from the link above. The following are |
| // the possible values: |
| enum OldThreadWaitReason { |
| EXECUTIVE = 0; |
| FREE_PAGE = 1; |
| PAGE_IN = 2; |
| POOL_ALLOCATION = 3; |
| DELAY_EXECUTION = 4; |
| SUSPEND = 5; |
| USER_REQUEST = 6; |
| WR_EXECUTIVE = 7; |
| WR_FREE_PAGE = 8; |
| WR_PAGE_IN = 9; |
| WR_POOL_ALLOCATION = 10; |
| WR_DELAY_EXECUTION = 11; |
| WR_SUSPENDED = 12; |
| WR_USER_REQUEST = 13; |
| WR_EVENT_PAIR = 14; |
| WR_QUEUE = 15; |
| WR_LPC_RECEIVER = 16; |
| WR_LPC_REPLY = 17; |
| WR_VIRTUAL_MEMORY = 18; |
| WR_PAGE_OUT = 19; |
| WR_RENDEZ_VOUS = 20; |
| WR_KEYED_EVENT = 21; |
| WR_TERMINATED = 22; |
| WR_PROCESS_IN_SWAP = 23; |
| WR_CPU_RATE_CONTROL = 24; |
| WR_CALLOUT_STACK = 25; |
| WR_KERNEL = 26; |
| WR_RESOURCE = 27; |
| WR_PUSH_LOCK = 28; |
| WR_MUTEX = 29; |
| WR_QUANTUM_END = 30; |
| WR_DISPATCH_INT = 31; |
| WR_PREEMPTED = 32; |
| WR_YIELD_EXECUTION = 33; |
| WR_FAST_MUTEX = 34; |
| WR_GUARD_MUTEX = 35; |
| WR_RUNDOWN = 36; |
| MAXIMUM_WAIT_REASON = 37; |
| } |
| |
| optional OldThreadWaitReason old_thread_wait_reason = 6; |
| |
| // Wait mode for the previous thread. The ordering is important as based on |
| // the OldThreadWaitMode definition from the link above. The following are the |
| // possible values: |
| enum OldThreadWaitMode { |
| KERNEL_MODE = 0; |
| USER_MODE = 1; |
| } |
| |
| optional OldThreadWaitMode old_thread_wait_mode = 7; |
| |
| // State of the previous thread. The ordering is important as based on the |
| // OldThreadState definition from the link above. The following are the |
| // possible state values: |
| enum OldThreadState { |
| INITIALIZED = 0; |
| READY = 1; |
| RUNNING = 2; |
| STANDBY = 3; |
| TERMINATED = 4; |
| WAITING = 5; |
| TRANSITION = 6; |
| DEFERRED_READY = 7; |
| } |
| |
| optional OldThreadState old_thread_state = 8; |
| |
| // Ideal wait time of the previous thread. |
| optional sint32 old_thread_wait_ideal_processor = 9; |
| |
| // Wait time for the new thread. |
| optional uint32 new_thread_wait_time = 10; |
| } |
| |
| // Proto definition based on the Thread_v2 CSwitch class definition |
| // See: https://learn.microsoft.com/en-us/windows/win32/etw/readythread |
| message ReadyThreadEtwEvent { |
| // The thread identifier of the thread being readied for execution. |
| optional uint32 t_thread_id = 1; |
| |
| // The reason for the priority boost. The ordering is important as based on |
| // the AdjustReason definition from the link above. |
| enum AdjustReason { |
| IGNORE_THE_INCREMENT = 0; |
| // Apply the increment, which will decay incrementally at the end of each |
| // quantum. |
| APPLY_INCREMENT = 1; |
| // Apply the increment as a boost that will decay in its entirety at quantum |
| // (typically for priority donation). |
| APPLY_INCREMENT_BOOST = 2; |
| } |
| |
| optional AdjustReason adjust_reason = 2; |
| |
| // The value by which the priority is being adjusted. |
| optional sint32 adjust_increment = 3; |
| |
| enum TraceFlag { |
| TRACE_FLAG_UNSPECIFIED = 0; |
| // The thread has been readied from DPC (deferred procedure call). |
| THREAD_READIED = 0x1; |
| // The kernel stack is currently swapped out. |
| KERNEL_STACK_SWAPPED_OUT = 0x2; |
| // The process address space is swapped out. |
| PROCESS_ADDRESS_SWAPPED_OUT = 0x4; |
| } |
| |
| optional TraceFlag flag = 4; |
| } |