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