Add counter to count #tx_searches during encoding

Add counter to count # tx searches during encoding to help with
encoder optimation and speed-ups.
The counter is added in the CONFIG_SPEED_STATS configuration
macro which is off by default. Other similar counters may be added
within this flag subsequently.

Change-Id: I09ecd8b20045c66fe1a850cebb7b703d44ece69e
diff --git a/av1/encoder/block.h b/av1/encoder/block.h
index df0196e..7cd8590 100644
--- a/av1/encoder/block.h
+++ b/av1/encoder/block.h
@@ -263,6 +263,9 @@
   int *ex_search_count_ptr;
 
   unsigned int txb_split_count;
+#if CONFIG_SPEED_STATS
+  unsigned int tx_search_count;
+#endif  // CONFIG_SPEED_STATS
 
   // These are set to their default values at the beginning, and then adjusted
   // further in the encoding process.
diff --git a/av1/encoder/encodeframe.c b/av1/encoder/encodeframe.c
index 2f92da9..acc0cbd 100644
--- a/av1/encoder/encodeframe.c
+++ b/av1/encoder/encodeframe.c
@@ -6302,6 +6302,9 @@
   cm->prev_mi = cm->allow_ref_frame_mvs ? cm->prev_mip : NULL;
 
   x->txb_split_count = 0;
+#if CONFIG_SPEED_STATS
+  x->tx_search_count = 0;
+#endif  // CONFIG_SPEED_STATS
 
   av1_zero(rdc->global_motion_used);
   av1_zero(cpi->gmparams_cost);
diff --git a/av1/encoder/encoder.c b/av1/encoder/encoder.c
index 9b3ab84..135e3f4 100644
--- a/av1/encoder/encoder.c
+++ b/av1/encoder/encoder.c
@@ -2683,6 +2683,9 @@
 
   cpi->count = 0;
   cpi->bytes = 0;
+#if CONFIG_SPEED_STATS
+  cpi->tx_search_count = 0;
+#endif  // CONFIG_SPEED_STATS
 
   if (cpi->b_calculate_psnr) {
     cpi->total_sq_error = 0;
@@ -3113,6 +3116,11 @@
       fclose(f);
     }
 #endif  // CONFIG_INTERNAL_STATS
+#if CONFIG_SPEED_STATS
+    if (cpi->oxcf.pass != 1) {
+      fprintf(stdout, "tx_search_count = %d\n", cpi->tx_search_count);
+    }
+#endif  // CONFIG_SPEED_STATS
   }
 
   for (int frame = 0; frame < MAX_LAG_BUFFERS; ++frame) {
@@ -6984,6 +6992,12 @@
     compute_internal_stats(cpi, (int)(*size));
   }
 #endif  // CONFIG_INTERNAL_STATS
+#if CONFIG_SPEED_STATS
+  if (cpi->oxcf.pass != 1) {
+    cpi->tx_search_count += cpi->td.mb.tx_search_count;
+    cpi->td.mb.tx_search_count = 0;
+  }
+#endif  // CONFIG_SPEED_STATS
 
   aom_clear_system_state();
 
diff --git a/av1/encoder/encoder.h b/av1/encoder/encoder.h
index d84eec5..910b2de 100644
--- a/av1/encoder/encoder.h
+++ b/av1/encoder/encoder.h
@@ -767,6 +767,9 @@
   Metrics metrics;
 #endif
   int b_calculate_psnr;
+#if CONFIG_SPEED_STATS
+  unsigned int tx_search_count;
+#endif  // CONFIG_SPEED_STATS
 
   int droppable;
 
diff --git a/av1/encoder/ethread.c b/av1/encoder/ethread.c
index 943567f..ceb76c1 100644
--- a/av1/encoder/ethread.c
+++ b/av1/encoder/ethread.c
@@ -517,6 +517,9 @@
       av1_accumulate_frame_counts(&cpi->counts, thread_data->td->counts);
       accumulate_rd_opt(&cpi->td, thread_data->td);
       cpi->td.mb.txb_split_count += thread_data->td->mb.txb_split_count;
+#if CONFIG_SPEED_STATS
+      cpi->td.mb.tx_search_count += thread_data->td->mb.tx_search_count;
+#endif  // CONFIG_SPEED_STATS
     }
   }
 }
diff --git a/av1/encoder/rdopt.c b/av1/encoder/rdopt.c
index 9923e45..2448219 100644
--- a/av1/encoder/rdopt.c
+++ b/av1/encoder/rdopt.c
@@ -5835,6 +5835,9 @@
       save_tx_rd_info(n4, hash, x, rd_stats, mb_rd_record);
     return;
   }
+#if CONFIG_SPEED_STATS
+  ++x->tx_search_count;
+#endif  // CONFIG_SPEED_STATS
 
   // Precompute residual hashes and find existing or add new RD records to
   // store and reuse rate and distortion values to speed up TX size search.
diff --git a/build/cmake/aom_config_defaults.cmake b/build/cmake/aom_config_defaults.cmake
index ba4b99f..db0c9b9 100644
--- a/build/cmake/aom_config_defaults.cmake
+++ b/build/cmake/aom_config_defaults.cmake
@@ -125,6 +125,7 @@
 # AV1 experiment flags.
 set_aom_config_var(CONFIG_COLLECT_INTER_MODE_RD_STATS 1 NUMBER
                    "AV1 experiment flag.")
+set_aom_config_var(CONFIG_SPEED_STATS 0 NUMBER "AV1 experiment flag.")
 set_aom_config_var(CONFIG_COLLECT_RD_STATS 0 NUMBER "AV1 experiment flag.")
 set_aom_config_var(CONFIG_DIST_8X8 0 NUMBER "AV1 experiment flag.")
 set_aom_config_var(CONFIG_ENTROPY_STATS 0 NUMBER "AV1 experiment flag.")