Index: webrtc/modules/audio_processing/audio_processing_performance_unittest.cc |
diff --git a/webrtc/modules/audio_processing/audio_processing_performance_unittest.cc b/webrtc/modules/audio_processing/audio_processing_performance_unittest.cc |
index 285f600a421de06bb27178938115b0730584d296..093c03e89fe51ce8136c0523687470bda7b5fdf7 100644 |
--- a/webrtc/modules/audio_processing/audio_processing_performance_unittest.cc |
+++ b/webrtc/modules/audio_processing/audio_processing_performance_unittest.cc |
@@ -16,7 +16,7 @@ |
#include "testing/gtest/include/gtest/gtest.h" |
#include "webrtc/base/array_view.h" |
-#include "webrtc/base/criticalsection.h" |
+#include "webrtc/base/atomicops.h" |
#include "webrtc/base/platform_thread.h" |
#include "webrtc/base/random.h" |
#include "webrtc/base/safe_conversions.h" |
@@ -168,28 +168,19 @@ struct SimulationConfig { |
class FrameCounters { |
public: |
void IncreaseRenderCounter() { |
- rtc::CritScope cs(&crit_); |
- render_count_++; |
+ rtc::AtomicOps::Increment(&render_count_); |
} |
void IncreaseCaptureCounter() { |
- rtc::CritScope cs(&crit_); |
- capture_count_++; |
- } |
- |
- int GetCaptureCounter() const { |
- rtc::CritScope cs(&crit_); |
- return capture_count_; |
- } |
- |
- int GetRenderCounter() const { |
- rtc::CritScope cs(&crit_); |
- return render_count_; |
+ rtc::AtomicOps::Increment(&capture_count_); |
} |
int CaptureMinusRenderCounters() const { |
- rtc::CritScope cs(&crit_); |
- return capture_count_ - render_count_; |
+ // The return value will be approximate, but that's good enough since |
+ // by the time we return the value, it's not guaranteed to be correct |
+ // anyway. |
+ return rtc::AtomicOps::AcquireLoad(&capture_count_) - |
+ rtc::AtomicOps::AcquireLoad(&render_count_); |
} |
int RenderMinusCaptureCounters() const { |
@@ -197,32 +188,32 @@ class FrameCounters { |
} |
bool BothCountersExceedeThreshold(int threshold) const { |
- rtc::CritScope cs(&crit_); |
- return (render_count_ > threshold && capture_count_ > threshold); |
+ // TODO(tommi): We could use an event to signal this so that we don't need |
+ // to be polling from the main thread and possibly steal cycles. |
+ const int capture_count = rtc::AtomicOps::AcquireLoad(&capture_count_); |
+ const int render_count = rtc::AtomicOps::AcquireLoad(&render_count_); |
+ return (render_count > threshold && capture_count > threshold); |
} |
private: |
- rtc::CriticalSection crit_; |
- int render_count_ GUARDED_BY(crit_) = 0; |
- int capture_count_ GUARDED_BY(crit_) = 0; |
+ int render_count_ = 0; |
+ int capture_count_ = 0; |
}; |
-// Class that protects a flag using a lock. |
+// Class that represents a flag that can only be raised. |
peah-webrtc
2016/01/26 08:48:45
This class should be replaced with an rtc:Event as
|
class LockedFlag { |
public: |
bool get_flag() const { |
- rtc::CritScope cs(&crit_); |
- return flag_; |
+ return rtc::AtomicOps::AcquireLoad(&flag_); |
} |
void set_flag() { |
- rtc::CritScope cs(&crit_); |
- flag_ = true; |
+ if (!get_flag()) // read-only operation to avoid affecting the cache-line. |
+ rtc::AtomicOps::CompareAndSwap(&flag_, 0, 1); |
} |
private: |
- rtc::CriticalSection crit_; |
- bool flag_ GUARDED_BY(crit_) = false; |
+ int flag_ = 0; |
}; |
// Parent class for the thread processors. |
@@ -422,10 +413,9 @@ class TimedThreadApiProcessor { |
switch (processor_type_) { |
case ProcessorType::kRender: |
return ReadyToProcessRender(); |
- break; |
+ |
case ProcessorType::kCapture: |
return ReadyToProcessCapture(); |
- break; |
} |
// Should not be reached, but the return statement is needed for the code to |
@@ -689,6 +679,8 @@ bool TimedThreadApiProcessor::Process() { |
// Wait in a spinlock manner until it is ok to start processing. |
// Note that SleepMs is not applicable since it only allows sleeping |
// on a millisecond basis which is too long. |
+ // TODO(tommi): This loop may affect the performance of the test that it's |
+ // meant to measure. See if we could use events instead to signal readiness. |
peah-webrtc
2016/01/26 08:48:45
Yes, I think an event would be better to use here
|
while (!ReadyToProcess()) { |
} |