1*795d594fSAndroid Build Coastguard Worker /* 2*795d594fSAndroid Build Coastguard Worker * Copyright (C) 2013 The Android Open Source Project 3*795d594fSAndroid Build Coastguard Worker * 4*795d594fSAndroid Build Coastguard Worker * Licensed under the Apache License, Version 2.0 (the "License"); 5*795d594fSAndroid Build Coastguard Worker * you may not use this file except in compliance with the License. 6*795d594fSAndroid Build Coastguard Worker * You may obtain a copy of the License at 7*795d594fSAndroid Build Coastguard Worker * 8*795d594fSAndroid Build Coastguard Worker * http://www.apache.org/licenses/LICENSE-2.0 9*795d594fSAndroid Build Coastguard Worker * 10*795d594fSAndroid Build Coastguard Worker * Unless required by applicable law or agreed to in writing, software 11*795d594fSAndroid Build Coastguard Worker * distributed under the License is distributed on an "AS IS" BASIS, 12*795d594fSAndroid Build Coastguard Worker * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13*795d594fSAndroid Build Coastguard Worker * See the License for the specific language governing permissions and 14*795d594fSAndroid Build Coastguard Worker * limitations under the License. 15*795d594fSAndroid Build Coastguard Worker */ 16*795d594fSAndroid Build Coastguard Worker 17*795d594fSAndroid Build Coastguard Worker #ifndef ART_RUNTIME_THREAD_STATE_H_ 18*795d594fSAndroid Build Coastguard Worker #define ART_RUNTIME_THREAD_STATE_H_ 19*795d594fSAndroid Build Coastguard Worker 20*795d594fSAndroid Build Coastguard Worker #include <iosfwd> 21*795d594fSAndroid Build Coastguard Worker 22*795d594fSAndroid Build Coastguard Worker #include "base/macros.h" 23*795d594fSAndroid Build Coastguard Worker 24*795d594fSAndroid Build Coastguard Worker namespace art HIDDEN { 25*795d594fSAndroid Build Coastguard Worker 26*795d594fSAndroid Build Coastguard Worker // State stored in our C++ class Thread. 27*795d594fSAndroid Build Coastguard Worker // When we refer to "a suspended state", or when function names mention "ToSuspended" or 28*795d594fSAndroid Build Coastguard Worker // "FromSuspended", we mean any state other than kRunnable, i.e. any state in which the thread is 29*795d594fSAndroid Build Coastguard Worker // guaranteed not to access the Java heap. The kSuspended state is merely one of these. 30*795d594fSAndroid Build Coastguard Worker enum class ThreadState : uint8_t { 31*795d594fSAndroid Build Coastguard Worker // `kRunnable` was previously 67 but it is now set to 0 so that we do not need to extract 32*795d594fSAndroid Build Coastguard Worker // flags from the thread's `state_and_flags` to check for any flag being set while Runnable. 33*795d594fSAndroid Build Coastguard Worker // Note: All atomic accesses for a location should use the same data size, 34*795d594fSAndroid Build Coastguard Worker // so the incorrect old approach of reading just 16 bits has been rewritten. 35*795d594fSAndroid Build Coastguard Worker 36*795d594fSAndroid Build Coastguard Worker // Java 37*795d594fSAndroid Build Coastguard Worker // Thread.State JDWP state 38*795d594fSAndroid Build Coastguard Worker kTerminated = 66, // TERMINATED TS_ZOMBIE Thread.run has returned, but Thread* still around 39*795d594fSAndroid Build Coastguard Worker kRunnable = 0, // RUNNABLE TS_RUNNING runnable 40*795d594fSAndroid Build Coastguard Worker kObsoleteRunnable = 67, // --- --- obsolete value 41*795d594fSAndroid Build Coastguard Worker kTimedWaiting = 68, // TIMED_WAITING TS_WAIT in Object.wait() with a timeout 42*795d594fSAndroid Build Coastguard Worker kSleeping, // TIMED_WAITING TS_SLEEPING in Thread.sleep() 43*795d594fSAndroid Build Coastguard Worker kBlocked, // BLOCKED TS_MONITOR blocked on a monitor 44*795d594fSAndroid Build Coastguard Worker kWaiting, // WAITING TS_WAIT in Object.wait() 45*795d594fSAndroid Build Coastguard Worker kWaitingForLockInflation, // WAITING TS_WAIT blocked inflating a thin-lock 46*795d594fSAndroid Build Coastguard Worker kWaitingForTaskProcessor, // WAITING TS_WAIT blocked waiting for taskProcessor 47*795d594fSAndroid Build Coastguard Worker kWaitingForGcToComplete, // WAITING TS_WAIT blocked waiting for GC 48*795d594fSAndroid Build Coastguard Worker kWaitingForCheckPointsToRun, // WAITING TS_WAIT GC waiting for checkpoints to run 49*795d594fSAndroid Build Coastguard Worker kWaitingPerformingGc, // WAITING TS_WAIT performing GC 50*795d594fSAndroid Build Coastguard Worker kWaitingForDebuggerSend, // WAITING TS_WAIT blocked waiting for events to be sent 51*795d594fSAndroid Build Coastguard Worker kWaitingForDebuggerToAttach, // WAITING TS_WAIT blocked waiting for debugger to attach 52*795d594fSAndroid Build Coastguard Worker kWaitingInMainDebuggerLoop, // WAITING TS_WAIT blocking/reading/processing debugger events 53*795d594fSAndroid Build Coastguard Worker kWaitingForDebuggerSuspension, // WAITING TS_WAIT waiting for debugger suspend all 54*795d594fSAndroid Build Coastguard Worker kWaitingForJniOnLoad, // WAITING TS_WAIT waiting for execution of dlopen and JNI on load code 55*795d594fSAndroid Build Coastguard Worker kWaitingForSignalCatcherOutput, // WAITING TS_WAIT waiting for signal catcher IO to complete 56*795d594fSAndroid Build Coastguard Worker kWaitingInMainSignalCatcherLoop, // WAITING TS_WAIT blocking/reading/processing signals 57*795d594fSAndroid Build Coastguard Worker kWaitingForDeoptimization, // WAITING TS_WAIT waiting for deoptimization suspend all 58*795d594fSAndroid Build Coastguard Worker kWaitingForMethodTracingStart, // WAITING TS_WAIT waiting for method tracing to start 59*795d594fSAndroid Build Coastguard Worker kWaitingForVisitObjects, // WAITING TS_WAIT waiting for visiting objects 60*795d594fSAndroid Build Coastguard Worker kWaitingForGetObjectsAllocated, // WAITING TS_WAIT waiting for getting the number of allocated objects 61*795d594fSAndroid Build Coastguard Worker kWaitingWeakGcRootRead, // WAITING TS_WAIT waiting on the GC to read a weak root 62*795d594fSAndroid Build Coastguard Worker kWaitingForGcThreadFlip, // WAITING TS_WAIT waiting on the GC thread flip (CC collector) to finish 63*795d594fSAndroid Build Coastguard Worker kNativeForAbort, // WAITING TS_WAIT checking other threads are not run on abort. 64*795d594fSAndroid Build Coastguard Worker kStarting, // NEW TS_WAIT native thread started, not yet ready to run managed code 65*795d594fSAndroid Build Coastguard Worker kNative, // RUNNABLE TS_RUNNING running in a JNI native method 66*795d594fSAndroid Build Coastguard Worker kSuspended, // RUNNABLE TS_RUNNING suspended by GC or debugger 67*795d594fSAndroid Build Coastguard Worker kInvalidState, // Used as error value; never stored. 68*795d594fSAndroid Build Coastguard Worker }; 69*795d594fSAndroid Build Coastguard Worker EXPORT std::ostream& operator<<(std::ostream& os, ThreadState rhs); 70*795d594fSAndroid Build Coastguard Worker 71*795d594fSAndroid Build Coastguard Worker } // namespace art 72*795d594fSAndroid Build Coastguard Worker 73*795d594fSAndroid Build Coastguard Worker #endif // ART_RUNTIME_THREAD_STATE_H_ 74