Title: [200535] trunk
Revision
200535
Author
commit-qu...@webkit.org
Date
2016-05-06 20:08:18 -0700 (Fri, 06 May 2016)

Log Message

Web Inspector: Improve console.count()
https://bugs.webkit.org/show_bug.cgi?id=157439
<rdar://problem/26152654>

Patch by Joseph Pecoraro <pecor...@apple.com> on 2016-05-06
Reviewed by Timothy Hatcher.

Source/_javascript_Core:

  - make console.count() increment an unnamed global counter.
  - make console.count(label) increment a counter with that label name.

* inspector/agents/InspectorConsoleAgent.cpp:
(Inspector::InspectorConsoleAgent::count):

LayoutTests:

* inspector/console/console-api-expected.txt:
* inspector/console/console-count-expected.txt: Added.
* inspector/console/console-count.html: Added.
* inspector/console/console-time.html:

Modified Paths

Added Paths

Diff

Modified: trunk/LayoutTests/ChangeLog (200534 => 200535)


--- trunk/LayoutTests/ChangeLog	2016-05-07 00:05:58 UTC (rev 200534)
+++ trunk/LayoutTests/ChangeLog	2016-05-07 03:08:18 UTC (rev 200535)
@@ -1,3 +1,16 @@
+2016-05-06  Joseph Pecoraro  <pecor...@apple.com>
+
+        Web Inspector: Improve console.count()
+        https://bugs.webkit.org/show_bug.cgi?id=157439
+        <rdar://problem/26152654>
+
+        Reviewed by Timothy Hatcher.
+
+        * inspector/console/console-api-expected.txt:
+        * inspector/console/console-count-expected.txt: Added.
+        * inspector/console/console-count.html: Added.
+        * inspector/console/console-time.html:
+
 2016-05-06  Simon Fraser  <simon.fra...@apple.com>
 
         Enable IOS_TEXT_AUTOSIZING on Mac and make it testable

Modified: trunk/LayoutTests/inspector/console/console-api-expected.txt (200534 => 200535)


--- trunk/LayoutTests/inspector/console/console-api-expected.txt	2016-05-07 00:05:58 UTC (rev 200534)
+++ trunk/LayoutTests/inspector/console/console-api-expected.txt	2016-05-07 03:08:18 UTC (rev 200535)
@@ -621,7 +621,7 @@
   "_listeners": null,
   "_source": "console-api",
   "_level": "debug",
-  "_messageText": "<no label>: 1",
+  "_messageText": "Global: 1",
   "_type": "log",
   "_url": null,
   "_line": 3,
@@ -636,7 +636,7 @@
   "_listeners": null,
   "_source": "console-api",
   "_level": "debug",
-  "_messageText": "<no label>: 2",
+  "_messageText": "Global: 2",
   "_type": "log",
   "_url": null,
   "_line": 3,
@@ -651,7 +651,7 @@
   "_listeners": null,
   "_source": "console-api",
   "_level": "debug",
-  "_messageText": "<no label>: 3",
+  "_messageText": ": 1",
   "_type": "log",
   "_url": null,
   "_line": 3,
@@ -681,7 +681,7 @@
   "_listeners": null,
   "_source": "console-api",
   "_level": "debug",
-  "_messageText": "<no label>: 4",
+  "_messageText": ": 2",
   "_type": "log",
   "_url": null,
   "_line": 3,

Added: trunk/LayoutTests/inspector/console/console-count-expected.txt (0 => 200535)


--- trunk/LayoutTests/inspector/console/console-count-expected.txt	                        (rev 0)
+++ trunk/LayoutTests/inspector/console/console-count-expected.txt	2016-05-07 03:08:18 UTC (rev 200535)
@@ -0,0 +1,44 @@
+Tests for the console.count API.
+
+
+== Running test suite: console.count
+-- Running test case: NoArguments
+Global: 1
+Global: 2
+Global: 3
+Global: 4
+Global: 5
+Global: 6
+Global: 7
+Global: 8
+Global: 9
+Global: 10
+Global: 11
+Global: 12
+Global: 13
+Global: 14
+Global: 15
+Global: 16
+
+-- Running test case: WithLabel
+alpha: 1
+alpha: 2
+beta: 1
+alpha: 3
+alpha: 4
+alpha: 5
+beta: 2
+alpha: 6
+alpha: 7
+alpha: 8
+beta: 3
+alpha: 9
+alpha: 10
+alpha: 11
+beta: 4
+alpha: 12
+alpha: 13
+alpha: 14
+beta: 5
+alpha: 15
+

Added: trunk/LayoutTests/inspector/console/console-count.html (0 => 200535)


--- trunk/LayoutTests/inspector/console/console-count.html	                        (rev 0)
+++ trunk/LayoutTests/inspector/console/console-count.html	2016-05-07 03:08:18 UTC (rev 200535)
@@ -0,0 +1,76 @@
+<!DOCTYPE html>
+<html>
+<head>
+<script src=""
+<script>
+function triggerCountNoArguments() {
+    for (let i = 0; i < 10; ++i) {
+        console.count();
+        if (i % 2)
+            console.count();
+    }
+}
+
+function triggerLabeledCounters() {
+    for (let i = 0; i < 10; ++i) {
+        console.count("alpha");
+        if (i % 2) {
+            console.count("beta");
+            console.count("alpha");
+        }
+    }
+}
+
+function test()
+{
+    let suite = InspectorTest.createAsyncSuite("console.count");
+
+    suite.addTestCase({
+        name: "NoArguments",
+        description: "No arguments increments a shared global counter.",
+        test: (resolve, reject) => {
+            let seen = 0;
+            const expected = 16;
+            WebInspector.logManager.addEventListener(WebInspector.LogManager.Event.MessageAdded, handler);
+            function handler(event) {
+                let message = event.data.message;
+                InspectorTest.log(message.messageText);
+                if (++seen === expected) {
+                    WebInspector.logManager.removeEventListener(WebInspector.LogManager.Event.MessageAdded, handler);
+                    resolve();
+                }
+            }
+
+            InspectorTest.evaluateInPage("triggerCountNoArguments()"); // 15
+            InspectorTest.evaluateInPage("console.count()"); // 1
+        }
+    });
+
+    suite.addTestCase({
+        name: "WithLabel",
+        description: "Labeled counters increment the label.",
+        test: (resolve, reject) => {
+            let seen = 0;
+            const expected = 20;
+            WebInspector.logManager.addEventListener(WebInspector.LogManager.Event.MessageAdded, handler);
+            function handler(event) {
+                let message = event.data.message;
+                InspectorTest.log(message.messageText);
+                if (++seen === expected) {
+                    WebInspector.logManager.removeEventListener(WebInspector.LogManager.Event.MessageAdded, handler);
+                    resolve();
+                }
+            }
+
+            InspectorTest.evaluateInPage("triggerLabeledCounters()");
+        }
+    });
+
+    suite.runTestCasesAndFinish();
+}
+</script>
+</head>
+<body _onload_="runTest()">
+<p>Tests for the console.count API.</p>
+</body>
+</html>

Modified: trunk/LayoutTests/inspector/console/console-time.html (200534 => 200535)


--- trunk/LayoutTests/inspector/console/console-time.html	2016-05-07 00:05:58 UTC (rev 200534)
+++ trunk/LayoutTests/inspector/console/console-time.html	2016-05-07 03:08:18 UTC (rev 200535)
@@ -21,7 +21,7 @@
                 if (++seen === expected) {
                     WebInspector.logManager.removeEventListener(WebInspector.LogManager.Event.MessageAdded, handler);
                     resolve();
-                }                
+                }
             }
 
             InspectorTest.evaluateInPage("console.time()");
@@ -39,8 +39,6 @@
         name: "UserLabels",
         description: "Test that user labels works as expected.",
         test: (resolve, reject) => {
-            let seen = 0;
-            const expected = 3;
             WebInspector.logManager.singleFireEventListener(WebInspector.LogManager.Event.MessageAdded, (event) => {
                 let message = event.data.message;
                 InspectorTest.expectThat(message.type === WebInspector.ConsoleMessage.MessageType.Timing, "Should receive a Timing type message.");
@@ -68,7 +66,7 @@
                 if (++seen === expected) {
                     WebInspector.logManager.removeEventListener(WebInspector.LogManager.Event.MessageAdded, handler);
                     resolve();
-                }                
+                }
             }
 
             InspectorTest.evaluateInPage("console.time('my-label-1')");
@@ -94,7 +92,7 @@
                 if (message.type === WebInspector.ConsoleMessage.MessageType.Timing) {
                     WebInspector.logManager.removeEventListener(WebInspector.LogManager.Event.MessageAdded, handler);
                     resolve();
-                }                
+                }
             }
 
             InspectorTest.evaluateInPage("console.time()");

Modified: trunk/Source/_javascript_Core/ChangeLog (200534 => 200535)


--- trunk/Source/_javascript_Core/ChangeLog	2016-05-07 00:05:58 UTC (rev 200534)
+++ trunk/Source/_javascript_Core/ChangeLog	2016-05-07 03:08:18 UTC (rev 200535)
@@ -1,3 +1,17 @@
+2016-05-06  Joseph Pecoraro  <pecor...@apple.com>
+
+        Web Inspector: Improve console.count()
+        https://bugs.webkit.org/show_bug.cgi?id=157439
+        <rdar://problem/26152654>
+
+        Reviewed by Timothy Hatcher.
+
+          - make console.count() increment an unnamed global counter.
+          - make console.count(label) increment a counter with that label name.
+
+        * inspector/agents/InspectorConsoleAgent.cpp:
+        (Inspector::InspectorConsoleAgent::count):
+
 2016-05-06  Simon Fraser  <simon.fra...@apple.com>
 
         Enable IOS_TEXT_AUTOSIZING on Mac and make it testable

Modified: trunk/Source/_javascript_Core/inspector/agents/InspectorConsoleAgent.cpp (200534 => 200535)


--- trunk/Source/_javascript_Core/inspector/agents/InspectorConsoleAgent.cpp	2016-05-07 00:05:58 UTC (rev 200534)
+++ trunk/Source/_javascript_Core/inspector/agents/InspectorConsoleAgent.cpp	2016-05-07 03:08:18 UTC (rev 200535)
@@ -179,30 +179,26 @@
 void InspectorConsoleAgent::count(JSC::ExecState* state, PassRefPtr<ScriptArguments> arguments)
 {
     RefPtr<ScriptCallStack> callStack(createScriptCallStackForConsole(state, ScriptCallStack::maxCallStackSizeToCapture));
-    const ScriptCallFrame& lastCaller = callStack->at(0);
-    // Follow Firebug's behavior of counting with null and undefined title in
-    // the same bucket as no argument
-    String title;
-    arguments->getFirstArgumentAsString(title);
-    String identifier = title + '@' + lastCaller.sourceURL() + ':' + String::number(lastCaller.lineNumber());
 
-    HashMap<String, unsigned>::iterator it = m_counts.find(identifier);
-    int count;
-    if (it == m_counts.end())
-        count = 1;
-    else {
-        count = it->value + 1;
-        m_counts.remove(it);
+    String title;
+    String identifier;
+    if (!arguments->argumentCount()) {
+        // '@' prefix for engine generated labels.
+        title = ASCIILiteral("Global");
+        identifier = makeString('@', title);
+    } else {
+        // '#' prefix for user labels.
+        arguments->getFirstArgumentAsString(title);
+        identifier = makeString('#', title);
     }
 
-    m_counts.add(identifier, count);
+    auto result = m_counts.add(identifier, 1);
+    if (!result.isNewEntry)
+        result.iterator->value += 1;
 
-    String message;
-    if (title.isEmpty())
-        message = "<no label>: " + String::number(count);
-    else
-        message = title + ": " + String::number(count);
+    // FIXME: Web Inspector should have a better UI for counters, but for now we just log an updated counter value.
 
+    String message = makeString(title, ": ", String::number(result.iterator->value));
     addMessageToConsole(std::make_unique<ConsoleMessage>(MessageSource::ConsoleAPI, MessageType::Log, MessageLevel::Debug, message, callStack));
 }
 
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to