Option to gnuplot dex layout
Display the portions of the dex file that are accessed by the classes in
the dex file. Optionally limit the display to only those classes that
are present in a runtime profile.
Bug: 29921113
Change-Id: I2a998fba448fec6c23941d3b4358531b1336e1b3
Test: dexlayout test
diff --git a/dexlayout/dexlayout.cc b/dexlayout/dexlayout.cc
index 6f34a33..e614137 100644
--- a/dexlayout/dexlayout.cc
+++ b/dexlayout/dexlayout.cc
@@ -34,6 +34,8 @@
#include "dex_ir_builder.h"
#include "dex_file-inl.h"
#include "dex_instruction-inl.h"
+#include "dex_visualize.h"
+#include "jit/offline_profiling_info.h"
#include "os.h"
#include "utils.h"
@@ -50,6 +52,11 @@
FILE* out_file_ = stdout;
/*
+ * Profile information file.
+ */
+ProfileCompilationInfo* profile_info_ = nullptr;
+
+/*
* Flags for use with createAccessFlagStr().
*/
enum AccessFor {
@@ -1587,13 +1594,18 @@
/*
* Dumps the requested sections of the file.
*/
-static void ProcessDexFile(const char* file_name, const DexFile* dex_file) {
+static void ProcessDexFile(const char* file_name, const DexFile* dex_file, size_t dex_file_index) {
if (options_.verbose_) {
fprintf(out_file_, "Opened '%s', DEX version '%.3s'\n",
file_name, dex_file->GetHeader().magic_ + 4);
}
std::unique_ptr<dex_ir::Header> header(dex_ir::DexIrBuilder(*dex_file));
+ if (options_.visualize_pattern_) {
+ VisualizeDexLayout(header.get(), dex_file, dex_file_index);
+ return;
+ }
+
// Headers.
if (options_.show_file_headers_) {
DumpFileHeader(header.get());
@@ -1658,7 +1670,7 @@
fprintf(out_file_, "Checksum verified\n");
} else {
for (size_t i = 0; i < dex_files.size(); i++) {
- ProcessDexFile(file_name, dex_files[i].get());
+ ProcessDexFile(file_name, dex_files[i].get(), i);
}
}
return 0;