#include "HeapTable.h"
#include "MarkSweep.h"
+typedef struct HeapSource HeapSource;
+
struct GcHeap {
HeapSource *heapSource;
*/
GcMarkContext markContext;
- /* Set to dvmGetRelativeTimeUsec() whenever a GC begins.
- * The value is preserved between GCs, so it can be used
- * to determine the time between successive GCs.
- * Initialized to zero before the first GC.
- */
- u8 gcStartTime;
+ /* GC's card table */
+ u1* cardTableBase;
+ size_t cardTableLength;
/* Is the GC running? Used to avoid recursive calls to GC.
*/
int ddmHpsgWhat;
int ddmNhsgWhen;
int ddmNhsgWhat;
-
-#if WITH_HPROF
- bool hprofDumpOnGc;
- const char* hprofFileName;
- int hprofFd;
- hprof_context_t *hprofContext;
- int hprofResult;
- bool hprofDirectToDdms;
-#endif
};
bool dvmLockHeap(void);
void dvmUnlockHeap(void);
-void dvmLogGcStats(size_t numFreed, size_t sizeFreed, size_t gcTimeMs);
-void dvmLogMadviseStats(size_t madvisedSizes[], size_t arrayLen);
-void dvmHeapSizeChanged(void);
/*
* Logging helpers
#define LOGV_HEAP(...) LOG(LOG_VERBOSE, HEAP_LOG_TAG, __VA_ARGS__)
#define LOGD_HEAP(...) LOG(LOG_DEBUG, HEAP_LOG_TAG, __VA_ARGS__)
#endif
-#define LOGI_HEAP(...) LOG(LOG_INFO, HEAP_LOG_TAG, __VA_ARGS__)
+#define LOGI_HEAP(...) \
+ (!gDvm.zygote ? LOG(LOG_INFO, HEAP_LOG_TAG, __VA_ARGS__) : (void)0)
#define LOGW_HEAP(...) LOG(LOG_WARN, HEAP_LOG_TAG, __VA_ARGS__)
#define LOGE_HEAP(...) LOG(LOG_ERROR, HEAP_LOG_TAG, __VA_ARGS__)
-#define QUIET_ZYGOTE_GC 1
-#if QUIET_ZYGOTE_GC
-#undef LOGI_HEAP
-#define LOGI_HEAP(...) \
- do { \
- if (!gDvm.zygote) { \
- LOG(LOG_INFO, HEAP_LOG_TAG, __VA_ARGS__); \
- } \
- } while (false)
-#endif
-
#define FRACTIONAL_MB(n) (n) / (1024 * 1024), \
((((n) % (1024 * 1024)) / 1024) * 1000) / 1024
#define FRACTIONAL_PCT(n,max) ((n) * 100) / (max), \