diff TaskManager/Cell/spe/CellDmaManager.cc @ 242:8382f0f8c0b4

dma_wait
author e065746@localhost.localdomain
date Sun, 31 May 2009 15:55:00 +0900
parents f8182c7058b5
children e19d2c9e85b0 6bb8725e60ae
line wrap: on
line diff
--- a/TaskManager/Cell/spe/CellDmaManager.cc	Sat May 30 16:21:42 2009 +0900
+++ b/TaskManager/Cell/spe/CellDmaManager.cc	Sun May 31 15:55:00 2009 +0900
@@ -37,13 +37,34 @@
  *
  * @param[in] mask Tag for Wait DMA process
  */
+void
+CellDmaManager::start_dmawait_profile()
+{
+    wait_time = spu_readch(SPU_RdDec); 
+    global_busy_time += busy_time - wait_time;
+    spu_writech(SPU_WrDec, 0xffffffff);
+}
+
+void
+CellDmaManager::end_dmawait_profile()
+{
+    wait_time = spu_readch(SPU_RdDec);
+    global_wait_time += 0xffffffff - wait_time;
+    busy_time = wait_time;
+}
 
 void
 CellDmaManager::dma_wait(uint32 mask)
 {
+#ifdef SPU_PROFILE
+    start_dmawait_profile();
+#endif
     mfc_write_tag_mask(1 << mask);
     mfc_write_tag_update_all();
     mfc_read_tag_status();
+#ifdef SPU_PROFILE
+    end_dmawait_profile();
+#endif
 }
 
 void