diff options
Diffstat (limited to 'vm/alloc/HeapWorker.h')
-rw-r--r-- | vm/alloc/HeapWorker.h | 92 |
1 files changed, 92 insertions, 0 deletions
diff --git a/vm/alloc/HeapWorker.h b/vm/alloc/HeapWorker.h new file mode 100644 index 0000000..45587ff --- /dev/null +++ b/vm/alloc/HeapWorker.h @@ -0,0 +1,92 @@ +/* + * Copyright (C) 2008 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +/* + * Manage async heap tasks. + */ +#ifndef _DALVIK_ALLOC_HEAP_WORKER +#define _DALVIK_ALLOC_HEAP_WORKER + +/* + * Initialize any HeapWorker state that Heap.c + * cares about. This lets the GC start before the + * HeapWorker thread is initialized. + */ +void dvmInitializeHeapWorkerState(void); + +/* + * Initialization. Starts/stops the worker thread. + */ +bool dvmHeapWorkerStartup(void); +void dvmHeapWorkerShutdown(void); + +/* + * Tell the worker thread to wake up and do work. + * If shouldLock is false, the caller must have already + * acquired gDvm.heapWorkerLock. + */ +void dvmSignalHeapWorker(bool shouldLock); + +/* + * Block until all pending heap worker work has finished. + */ +void dvmWaitForHeapWorkerIdle(void); + +/* + * Does not return until any pending finalizers have been called. + * This may or may not happen in the context of the calling thread. + * No exceptions will escape. + * + * Used by zygote, which doesn't have a HeapWorker thread. + */ +void dvmRunFinalizationSync(void); + +/* + * Requests that dvmHeapSourceTrim() be called no sooner + * than timeoutSec seconds from now. If timeoutSec + * is zero, any pending trim is cancelled. + * + * Caller must hold heapWorkerLock. + */ +void dvmScheduleHeapSourceTrim(size_t timeoutSec); + +/* Make sure that the HeapWorker thread hasn't spent an inordinate + * amount of time inside interpreted code. + * + * Aborts the VM if the thread appears to be wedged. + * + * The caller must hold the heapWorkerLock. + */ +void dvmAssertHeapWorkerThreadRunning(); + +/* + * The type of operation for HeapWorker to perform on an object. + */ +typedef enum HeapWorkerOperation { + WORKER_FINALIZE = 0, + WORKER_ENQUEUE = 1, +} HeapWorkerOperation; + +/* + * Called by the worker thread to get the next object + * to finalize/enqueue/clear. Implemented in Heap.c. + * + * @param op The operation to perform on the returned object. + * Must be non-NULL. + * @return The object to operate on, or NULL. + */ +Object *dvmGetNextHeapWorkerObject(HeapWorkerOperation *op); + +#endif /*_DALVIK_ALLOC_HEAP_WORKER*/ |