12dd0e2cea360bc9206eb88ecc40d259e796c239dIan Rogers/* 22dd0e2cea360bc9206eb88ecc40d259e796c239dIan Rogers * Copyright (C) 2013 The Android Open Source Project 32dd0e2cea360bc9206eb88ecc40d259e796c239dIan Rogers * 42dd0e2cea360bc9206eb88ecc40d259e796c239dIan Rogers * Licensed under the Apache License, Version 2.0 (the "License"); 52dd0e2cea360bc9206eb88ecc40d259e796c239dIan Rogers * you may not use this file except in compliance with the License. 62dd0e2cea360bc9206eb88ecc40d259e796c239dIan Rogers * You may obtain a copy of the License at 72dd0e2cea360bc9206eb88ecc40d259e796c239dIan Rogers * 82dd0e2cea360bc9206eb88ecc40d259e796c239dIan Rogers * http://www.apache.org/licenses/LICENSE-2.0 92dd0e2cea360bc9206eb88ecc40d259e796c239dIan Rogers * 102dd0e2cea360bc9206eb88ecc40d259e796c239dIan Rogers * Unless required by applicable law or agreed to in writing, software 112dd0e2cea360bc9206eb88ecc40d259e796c239dIan Rogers * distributed under the License is distributed on an "AS IS" BASIS, 122dd0e2cea360bc9206eb88ecc40d259e796c239dIan Rogers * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 132dd0e2cea360bc9206eb88ecc40d259e796c239dIan Rogers * See the License for the specific language governing permissions and 142dd0e2cea360bc9206eb88ecc40d259e796c239dIan Rogers * limitations under the License. 152dd0e2cea360bc9206eb88ecc40d259e796c239dIan Rogers */ 162dd0e2cea360bc9206eb88ecc40d259e796c239dIan Rogers 17fc0e3219edc9a5bf81b166e82fd5db2796eb6a0dBrian Carlstrom#ifndef ART_RUNTIME_THREAD_STATE_H_ 18fc0e3219edc9a5bf81b166e82fd5db2796eb6a0dBrian Carlstrom#define ART_RUNTIME_THREAD_STATE_H_ 192dd0e2cea360bc9206eb88ecc40d259e796c239dIan Rogers 206a3c1fcb4ba42ad4d5d142c17a3712a6ddd3866fIan Rogers#include <ostream> 216a3c1fcb4ba42ad4d5d142c17a3712a6ddd3866fIan Rogers 222dd0e2cea360bc9206eb88ecc40d259e796c239dIan Rogersnamespace art { 232dd0e2cea360bc9206eb88ecc40d259e796c239dIan Rogers 242dd0e2cea360bc9206eb88ecc40d259e796c239dIan Rogersenum ThreadState { 257934ac288acfb2552bb0b06ec1f61e5820d924a4Brian Carlstrom // Thread.State JDWP state 260aded089f565008ba5908e395e5914ca4f91f2deDave Allison kTerminated = 66, // TERMINATED TS_ZOMBIE Thread.run has returned, but Thread* still around 277934ac288acfb2552bb0b06ec1f61e5820d924a4Brian Carlstrom kRunnable, // RUNNABLE TS_RUNNING runnable 287934ac288acfb2552bb0b06ec1f61e5820d924a4Brian Carlstrom kTimedWaiting, // TIMED_WAITING TS_WAIT in Object.wait() with a timeout 297934ac288acfb2552bb0b06ec1f61e5820d924a4Brian Carlstrom kSleeping, // TIMED_WAITING TS_SLEEPING in Thread.sleep() 307934ac288acfb2552bb0b06ec1f61e5820d924a4Brian Carlstrom kBlocked, // BLOCKED TS_MONITOR blocked on a monitor 317934ac288acfb2552bb0b06ec1f61e5820d924a4Brian Carlstrom kWaiting, // WAITING TS_WAIT in Object.wait() 327934ac288acfb2552bb0b06ec1f61e5820d924a4Brian Carlstrom kWaitingForGcToComplete, // WAITING TS_WAIT blocked waiting for GC 337934ac288acfb2552bb0b06ec1f61e5820d924a4Brian Carlstrom kWaitingForCheckPointsToRun, // WAITING TS_WAIT GC waiting for checkpoints to run 347934ac288acfb2552bb0b06ec1f61e5820d924a4Brian Carlstrom kWaitingPerformingGc, // WAITING TS_WAIT performing GC 357934ac288acfb2552bb0b06ec1f61e5820d924a4Brian Carlstrom kWaitingForDebuggerSend, // WAITING TS_WAIT blocked waiting for events to be sent 367934ac288acfb2552bb0b06ec1f61e5820d924a4Brian Carlstrom kWaitingForDebuggerToAttach, // WAITING TS_WAIT blocked waiting for debugger to attach 377934ac288acfb2552bb0b06ec1f61e5820d924a4Brian Carlstrom kWaitingInMainDebuggerLoop, // WAITING TS_WAIT blocking/reading/processing debugger events 387934ac288acfb2552bb0b06ec1f61e5820d924a4Brian Carlstrom kWaitingForDebuggerSuspension, // WAITING TS_WAIT waiting for debugger suspend all 397934ac288acfb2552bb0b06ec1f61e5820d924a4Brian Carlstrom kWaitingForJniOnLoad, // WAITING TS_WAIT waiting for execution of dlopen and JNI on load code 407934ac288acfb2552bb0b06ec1f61e5820d924a4Brian Carlstrom kWaitingForSignalCatcherOutput, // WAITING TS_WAIT waiting for signal catcher IO to complete 417934ac288acfb2552bb0b06ec1f61e5820d924a4Brian Carlstrom kWaitingInMainSignalCatcherLoop, // WAITING TS_WAIT blocking/reading/processing signals 42138dbfc3336e379d74d157086f69a0fbe830089bSebastien Hertz kWaitingForDeoptimization, // WAITING TS_WAIT waiting for deoptimization suspend all 43bae182cbc6adc8796154162a87fc54ae804e0469Sebastien Hertz kWaitingForMethodTracingStart, // WAITING TS_WAIT waiting for method tracing to start 440c8c303c20cdaaf54d26e45cc17dc5afb820d8efHiroshi Yamauchi kWaitingForVisitObjects, // WAITING TS_WAIT waiting for visiting objects 45b43390cb87eace4a017f672d66cfb20fb9e76aa1Mathieu Chartier kWaitingForGetObjectsAllocated, // WAITING TS_WAIT waiting for getting the number of allocated objects 4690ef3db4bd1d4865f5f9cb95c8e7d9afb46994f9Mathieu Chartier kWaitingWeakGcRootRead, // WAITING TS_WAIT waiting on the GC to read a weak root 4776f55b030d2517d434f227bee2363c3fb760e5c6Hiroshi Yamauchi kWaitingForGcThreadFlip, // WAITING TS_WAIT waiting on the GC thread flip (CC collector) to finish 487934ac288acfb2552bb0b06ec1f61e5820d924a4Brian Carlstrom kStarting, // NEW TS_WAIT native thread started, not yet ready to run managed code 497934ac288acfb2552bb0b06ec1f61e5820d924a4Brian Carlstrom kNative, // RUNNABLE TS_RUNNING running in a JNI native method 507934ac288acfb2552bb0b06ec1f61e5820d924a4Brian Carlstrom kSuspended, // RUNNABLE TS_RUNNING suspended by GC or debugger 512dd0e2cea360bc9206eb88ecc40d259e796c239dIan Rogers}; 526a3c1fcb4ba42ad4d5d142c17a3712a6ddd3866fIan Rogersstd::ostream& operator<<(std::ostream& os, const ThreadState& rhs); 532dd0e2cea360bc9206eb88ecc40d259e796c239dIan Rogers 542dd0e2cea360bc9206eb88ecc40d259e796c239dIan Rogers} // namespace art 552dd0e2cea360bc9206eb88ecc40d259e796c239dIan Rogers 56fc0e3219edc9a5bf81b166e82fd5db2796eb6a0dBrian Carlstrom#endif // ART_RUNTIME_THREAD_STATE_H_ 57