[Profile] Allow multiple calls to get profile data
[platform/adaptation/npu/trix-engine.git] / src / core / ne-profiler.cc
index 88e9174..20fcb80 100644 (file)
@@ -26,7 +26,12 @@ ModelProfiler::appendRequest (int req_id, const Model *model) {
 }
 
 int
-ModelProfiler::getProfile (int req_id, npu_profile *profile) {
+ModelProfiler::removeRequest (int req_id) {
+  return profile_map_.remove (req_id);
+}
+
+int
+ModelProfiler::getProfile (int req_id, const npu_profile_opt &opt, npu_profile *profile) {
   ProfileData *data = profile_map_.find (req_id);
   if (data == nullptr)
     return -ENOENT;
@@ -39,20 +44,22 @@ ModelProfiler::getProfile (int req_id, npu_profile *profile) {
   if (status != 0)
     return status;
 
-  HWmem *extended = model->getExtendedMetadata ();
-  if (extended != nullptr)
-    manipulateProfile (extended, profile);
+  if (opt.level == PROFILE_LEVEL_EXT_META || opt.level == PROFILE_LEVEL_LAYER) {
+    HWmem *extended = model->getExtendedMetadata ();
+    if (extended != nullptr)
+      manipulateProfile (extended, profile);
+    else if (opt.level == PROFILE_LEVEL_LAYER)
+      status = -EINVAL;
+  }
 
-  profile_map_.remove (req_id);
-  return 0;
+  return status;
 }
 
 void
 ModelProfiler::manipulateProfile (HWmem *extended, npu_profile *profile) {
   npubin_meta_profile *meta_profile =
       reinterpret_cast<npubin_meta_profile *> (extended->getData ());
-  npu_profile_layer *new_layers =
-      new npu_profile_layer[meta_profile->node_entry_num + 1];
+  npu_profile_layer *new_layers = new npu_profile_layer[meta_profile->node_entry_num + 1];
 
   npu_profile_layer *unclassified = &new_layers[meta_profile->node_entry_num];
 
@@ -138,14 +145,10 @@ ModelProfiler::manipulateProfile (HWmem *extended, npu_profile *profile) {
             layer->start_cycles = profile->layers[i].start_cycles;
           if (layer->end_cycles < profile->layers[i].end_cycles)
             layer->end_cycles = profile->layers[i].end_cycles;
-          layer->dram_read_bytes +=
-              profile->layers[i].dram_read_bytes / node_num;
-          layer->dram_write_bytes +=
-              profile->layers[i].dram_write_bytes / node_num;
-          layer->sram_read_bytes +=
-              profile->layers[i].sram_read_bytes / node_num;
-          layer->sram_write_bytes +=
-              profile->layers[i].sram_write_bytes / node_num;
+          layer->dram_read_bytes += profile->layers[i].dram_read_bytes / node_num;
+          layer->dram_write_bytes += profile->layers[i].dram_write_bytes / node_num;
+          layer->sram_read_bytes += profile->layers[i].sram_read_bytes / node_num;
+          layer->sram_write_bytes += profile->layers[i].sram_write_bytes / node_num;
           layer->visa_exec_seq = -1;
         } else {
           std::cerr << "Unable to find the node ID " << node_id << std::endl;