112c08f03f65acc1c308491fc7ab6c57f682e2f24Jeff Hao/*
212c08f03f65acc1c308491fc7ab6c57f682e2f24Jeff Hao * Copyright (C) 2015 The Android Open Source Project
312c08f03f65acc1c308491fc7ab6c57f682e2f24Jeff Hao *
412c08f03f65acc1c308491fc7ab6c57f682e2f24Jeff Hao * Licensed under the Apache License, Version 2.0 (the "License");
512c08f03f65acc1c308491fc7ab6c57f682e2f24Jeff Hao * you may not use this file except in compliance with the License.
612c08f03f65acc1c308491fc7ab6c57f682e2f24Jeff Hao * You may obtain a copy of the License at
712c08f03f65acc1c308491fc7ab6c57f682e2f24Jeff Hao *
812c08f03f65acc1c308491fc7ab6c57f682e2f24Jeff Hao *      http://www.apache.org/licenses/LICENSE-2.0
912c08f03f65acc1c308491fc7ab6c57f682e2f24Jeff Hao *
1012c08f03f65acc1c308491fc7ab6c57f682e2f24Jeff Hao * Unless required by applicable law or agreed to in writing, software
1112c08f03f65acc1c308491fc7ab6c57f682e2f24Jeff Hao * distributed under the License is distributed on an "AS IS" BASIS,
1212c08f03f65acc1c308491fc7ab6c57f682e2f24Jeff Hao * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1312c08f03f65acc1c308491fc7ab6c57f682e2f24Jeff Hao * See the License for the specific language governing permissions and
1412c08f03f65acc1c308491fc7ab6c57f682e2f24Jeff Hao * limitations under the License.
1512c08f03f65acc1c308491fc7ab6c57f682e2f24Jeff Hao */
1612c08f03f65acc1c308491fc7ab6c57f682e2f24Jeff Hao
1712c08f03f65acc1c308491fc7ab6c57f682e2f24Jeff Hao#include "gc/heap.h"
1812c08f03f65acc1c308491fc7ab6c57f682e2f24Jeff Hao#include "jni.h"
1912c08f03f65acc1c308491fc7ab6c57f682e2f24Jeff Hao#include "runtime.h"
200795f23920ee9aabf28e45c63cd592dcccf00216Mathieu Chartier#include "scoped_thread_state_change-inl.h"
21b486a98aadc95d80548953410cf23edba62259faAndreas Gampe#include "thread-current-inl.h"
2212c08f03f65acc1c308491fc7ab6c57f682e2f24Jeff Hao
2312c08f03f65acc1c308491fc7ab6c57f682e2f24Jeff Haonamespace art {
2412c08f03f65acc1c308491fc7ab6c57f682e2f24Jeff Haonamespace {
2512c08f03f65acc1c308491fc7ab6c57f682e2f24Jeff Hao
2612c08f03f65acc1c308491fc7ab6c57f682e2f24Jeff Haoextern "C" JNIEXPORT jboolean JNICALL Java_MovingGCThread_performHomogeneousSpaceCompact(JNIEnv*, jclass) {
2712c08f03f65acc1c308491fc7ab6c57f682e2f24Jeff Hao  return Runtime::Current()->GetHeap()->PerformHomogeneousSpaceCompact() == gc::kSuccess ?
2812c08f03f65acc1c308491fc7ab6c57f682e2f24Jeff Hao      JNI_TRUE : JNI_FALSE;
2912c08f03f65acc1c308491fc7ab6c57f682e2f24Jeff Hao}
3012c08f03f65acc1c308491fc7ab6c57f682e2f24Jeff Hao
3112c08f03f65acc1c308491fc7ab6c57f682e2f24Jeff Haoextern "C" JNIEXPORT jboolean JNICALL Java_MovingGCThread_supportHomogeneousSpaceCompact(JNIEnv*, jclass) {
3212c08f03f65acc1c308491fc7ab6c57f682e2f24Jeff Hao  return Runtime::Current()->GetHeap()->SupportHomogeneousSpaceCompactAndCollectorTransitions() ?
3312c08f03f65acc1c308491fc7ab6c57f682e2f24Jeff Hao      JNI_TRUE : JNI_FALSE;
3412c08f03f65acc1c308491fc7ab6c57f682e2f24Jeff Hao}
3512c08f03f65acc1c308491fc7ab6c57f682e2f24Jeff Hao
3612c08f03f65acc1c308491fc7ab6c57f682e2f24Jeff Haoextern "C" JNIEXPORT jlong JNICALL Java_MovingGCThread_objectAddress(JNIEnv* env, jclass, jobject object) {
3712c08f03f65acc1c308491fc7ab6c57f682e2f24Jeff Hao  ScopedObjectAccess soa(env);
381cc62e4ea24828fdb3f3da0b8603f0b107d09a04Mathieu Chartier  return reinterpret_cast<jlong>(soa.Decode<mirror::Object>(object).Ptr());
3912c08f03f65acc1c308491fc7ab6c57f682e2f24Jeff Hao}
4012c08f03f65acc1c308491fc7ab6c57f682e2f24Jeff Hao
4112c08f03f65acc1c308491fc7ab6c57f682e2f24Jeff Hao}  // namespace
4212c08f03f65acc1c308491fc7ab6c57f682e2f24Jeff Hao}  // namespace art
43