• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /* ------------------------------------------------------------------
2  * Copyright (C) 1998-2009 PacketVideo
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
13  * express or implied.
14  * See the License for the specific language governing permissions
15  * and limitations under the License.
16  * -------------------------------------------------------------------
17  */
18 /*! \addtogroup osclproc OSCL Proc
19  *
20  * @{
21  */
22 
23 
24 
25 /** \file oscl_scheduler_threadcontext.h
26     \brief Thread context functions needed by oscl scheduler.
27 */
28 
29 #ifndef OSCL_SCHEDULER_THREAD_CONTEXT_H_INCLUDED
30 #define OSCL_SCHEDULER_THREAD_CONTEXT_H_INCLUDED
31 
32 #ifndef OSCL_AOSTATUS_H_INCLUDED
33 #include "oscl_aostatus.h"
34 #endif
35 
36 #ifndef OSCL_DOUBLE_LIST_H_INCLUDED
37 #include "oscl_double_list.h"
38 #endif
39 
40 #ifndef OSCL_MUTEX_H_INCLUDED
41 #include "oscl_mutex.h"
42 #endif
43 
44 /**
45 //Thread context type
46 */
47 enum TPVThreadContext
48 {
49     EPVThreadContext_InThread //context is in-thread
50     , EPVThreadContext_OsclThread //some other thread that has Oscl initialized
51     , EPVThreadContext_NonOsclThread //some thread that does not have Oscl initialized
52     , EPVThreadContext_Undetermined
53 };
54 
55 /**
56 //
57 // Thread context class.
58 //
59 */
60 class OsclExecSchedulerCommonBase;
61 class PVActiveBase;
62 class OsclBrewThreadYield;
63 class PVThreadContext
64 {
65     public:
66 
67         OSCL_IMPORT_REF PVThreadContext();
68         OSCL_IMPORT_REF ~PVThreadContext();
69         /**
70         //compare caller's thread context to this one.
71         */
72         OSCL_IMPORT_REF bool IsSameThreadContext();
73 
74         /**
75         //static routine to get a unique thread ID for
76         //caller's thread context.
77         */
78         OSCL_IMPORT_REF static uint32 Id();
79 
80         /**
81         //enter and exit thread context.
82         */
83         OSCL_IMPORT_REF void EnterThreadContext();
84         OSCL_IMPORT_REF void ExitThreadContext();
85 
86         /**
87         // a static utility to tell whether the calling
88         // thread has any scheduler-- either Oscl scheduler
89         // or native scheduler.
90         */
91         OSCL_IMPORT_REF static bool ThreadHasScheduler();
92 
93     private:
94 
95         /**
96         //leave if caller's thread doesn't match
97         //given thread.
98         */
99         static void LeaveIfWrongThread(PVThreadContext &a);
100 
101 
102         bool iOpen;
103 
104         /**
105         //complete & cancel requests for this thread context.
106         */
107         void PendComplete(PVActiveBase*, int32 aReason, TPVThreadContext aCallingContext);
108 
109 
110         OsclExecSchedulerCommonBase *iScheduler;
111 
112         /**
113         //the thread ID is OS-specific.
114         */
115         TOsclThreadId iThreadId;
116 
117         friend class PVActiveBase;
118         friend class OsclActiveObject;
119         friend class OsclTimerObject;
120         friend class OsclExecScheduler;
121         friend class OsclCoeActiveScheduler;
122         friend class OsclExecSchedulerCommonBase;
123         friend class OsclExecSchedulerBase;
124         friend class OsclCoeActiveSchedulerBase;
125 };
126 
127 
128 
129 
130 #endif //
131 
132 
133 /*! @} */
134