summaryrefslogtreecommitdiff
path: root/compiler/driver/compiler_driver.cc
diff options
context:
space:
mode:
author Andreas Gampe <agampe@google.com> 2018-04-13 17:28:34 -0700
committer Andreas Gampe <agampe@google.com> 2018-10-16 18:16:56 -0700
commit5c803116e26ef40ad2a9c14d3411e21d149e0c9b (patch)
tree349db3055779728a6b60eecfbb0b2e800af1d468 /compiler/driver/compiler_driver.cc
parenta683248b80d901f3dc8e37ac9764712875f27da9 (diff)
ART: Add profile-compile-check support
Add --check-profiled-methods, which verifies that all methods mentioned in a profile for a guided compilation are actually compiled instead of being punted. As outcome it may log or abort dex2oat. TODO: Extend dex2oat_test Bug: 76145463 Test: mmma art Test: m test-art-host Change-Id: I956113b55796d0666db9dbfd387105a7d27b0868
Diffstat (limited to 'compiler/driver/compiler_driver.cc')
-rw-r--r--compiler/driver/compiler_driver.cc24
1 files changed, 24 insertions, 0 deletions
diff --git a/compiler/driver/compiler_driver.cc b/compiler/driver/compiler_driver.cc
index 89ac308fed..408cde2c30 100644
--- a/compiler/driver/compiler_driver.cc
+++ b/compiler/driver/compiler_driver.cc
@@ -24,6 +24,7 @@
#include <malloc.h> // For mallinfo
#endif
+#include "android-base/logging.h"
#include "android-base/strings.h"
#include "art_field-inl.h"
@@ -609,6 +610,29 @@ static void CompileMethodQuick(
class_loader,
dex_file,
dex_cache);
+ ProfileMethodsCheck check_type =
+ driver->GetCompilerOptions().CheckProfiledMethodsCompiled();
+ if (UNLIKELY(check_type != ProfileMethodsCheck::kNone)) {
+ bool violation = driver->ShouldCompileBasedOnProfile(method_ref) &&
+ (compiled_method == nullptr);
+ if (violation) {
+ std::ostringstream oss;
+ oss << "Failed to compile "
+ << method_ref.dex_file->PrettyMethod(method_ref.index)
+ << "[" << method_ref.dex_file->GetLocation() << "]"
+ << " as expected by profile";
+ switch (check_type) {
+ case ProfileMethodsCheck::kNone:
+ break;
+ case ProfileMethodsCheck::kLog:
+ LOG(ERROR) << oss.str();
+ break;
+ case ProfileMethodsCheck::kAbort:
+ LOG(FATAL_WITHOUT_ABORT) << oss.str();
+ _exit(1);
+ }
+ }
+ }
}
if (compiled_method == nullptr &&
dex_to_dex_compilation_level !=