Use "= default" to denote default constructor or destructor
[WebKit-https.git] / Source / WebCore / page / DiagnosticLoggingClient.h
index 3413934..3193a62 100644 (file)
  * THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-#ifndef DiagnosticLoggingClient_h
-#define DiagnosticLoggingClient_h
+#pragma once
 
+#include "DiagnosticLoggingResultType.h"
+#include <wtf/FastMalloc.h>
 #include <wtf/Forward.h>
+#include <wtf/RandomNumber.h>
 
 namespace WebCore {
 
+enum class ShouldSample { No, Yes };
+
 class DiagnosticLoggingClient {
+    WTF_MAKE_FAST_ALLOCATED;
 public:
-    virtual void logDiagnosticMessage(const String& message, const String& description) { UNUSED_PARAM(message); UNUSED_PARAM(description); }
-
-    enum LogResultType {
-        Pass,
-        Fail,
-        Noop,
-    };
-    virtual void logDiagnosticMessageWithResult(const String& message, const String& description, LogResultType) { UNUSED_PARAM(message); UNUSED_PARAM(description); }
-    virtual void logDiagnosticMessageWithValue(const String& message, const String& description, const String& value) { UNUSED_PARAM(message); UNUSED_PARAM(description); UNUSED_PARAM(value); }
-
-protected:
-    virtual ~DiagnosticLoggingClient() { }
+    virtual void logDiagnosticMessage(const String& message, const String& description, ShouldSample) = 0;
+    virtual void logDiagnosticMessageWithResult(const String& message, const String& description, DiagnosticLoggingResultType, ShouldSample) = 0;
+    virtual void logDiagnosticMessageWithValue(const String& message, const String& description, double value, unsigned significantFigures, ShouldSample) = 0;
+    virtual void logDiagnosticMessageWithEnhancedPrivacy(const String& message, const String& description, ShouldSample) = 0;
+
+    static bool shouldLogAfterSampling(ShouldSample);
+
+    virtual ~DiagnosticLoggingClient() = default;
 };
 
+inline bool DiagnosticLoggingClient::shouldLogAfterSampling(ShouldSample shouldSample)
+{
+    if (shouldSample == ShouldSample::No)
+        return true;
+
+    static const double selectionProbability = 0.05;
+    return randomNumber() <= selectionProbability;
 }
 
-#endif
+} // namespace WebCore