• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2008 The Android Open Source Project
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 express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 /*
17  * Manage async heap tasks.
18  */
19 #ifndef _DALVIK_ALLOC_HEAP_WORKER
20 #define _DALVIK_ALLOC_HEAP_WORKER
21 
22 /*
23  * Initialize any HeapWorker state that Heap.c
24  * cares about.  This lets the GC start before the
25  * HeapWorker thread is initialized.
26  */
27 void dvmInitializeHeapWorkerState(void);
28 
29 /*
30  * Initialization.  Starts/stops the worker thread.
31  */
32 bool dvmHeapWorkerStartup(void);
33 void dvmHeapWorkerShutdown(void);
34 
35 /*
36  * Tell the worker thread to wake up and do work.
37  * If shouldLock is false, the caller must have already
38  * acquired gDvm.heapWorkerLock.
39  */
40 void dvmSignalHeapWorker(bool shouldLock);
41 
42 /*
43  * Block until all pending heap worker work has finished.
44  */
45 void dvmWaitForHeapWorkerIdle(void);
46 
47 /*
48  * Does not return until any pending finalizers have been called.
49  * This may or may not happen in the context of the calling thread.
50  * No exceptions will escape.
51  *
52  * Used by zygote, which doesn't have a HeapWorker thread.
53  */
54 void dvmRunFinalizationSync(void);
55 
56 /*
57  * Requests that dvmHeapSourceTrim() be called no sooner
58  * than timeoutSec seconds from now.  If timeoutSec
59  * is zero, any pending trim is cancelled.
60  *
61  * Caller must hold heapWorkerLock.
62  */
63 void dvmScheduleHeapSourceTrim(size_t timeoutSec);
64 
65 /* Make sure that the HeapWorker thread hasn't spent an inordinate
66  * amount of time inside interpreted code.
67  *
68  * Aborts the VM if the thread appears to be wedged.
69  *
70  * The caller must hold the heapWorkerLock.
71  */
72 void dvmAssertHeapWorkerThreadRunning();
73 
74 /*
75  * The type of operation for HeapWorker to perform on an object.
76  */
77 typedef enum HeapWorkerOperation {
78     WORKER_FINALIZE = 0,
79     WORKER_ENQUEUE = 1,
80 } HeapWorkerOperation;
81 
82 /*
83  * Called by the worker thread to get the next object
84  * to finalize/enqueue/clear.  Implemented in Heap.c.
85  *
86  * @param op The operation to perform on the returned object.
87  *           Must be non-NULL.
88  * @return The object to operate on, or NULL.
89  */
90 Object *dvmGetNextHeapWorkerObject(HeapWorkerOperation *op);
91 
92 #endif /*_DALVIK_ALLOC_HEAP_WORKER*/
93