1c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)/* 2c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) * Copyright (C) 2007 Apple Inc. All rights reserved. 3c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) * 4c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) * Redistribution and use in source and binary forms, with or without 5c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) * modification, are permitted provided that the following conditions 6c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) * are met: 7c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) * 8c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) * 1. Redistributions of source code must retain the above copyright 9c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) * notice, this list of conditions and the following disclaimer. 10c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) * 2. Redistributions in binary form must reproduce the above copyright 11c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) * notice, this list of conditions and the following disclaimer in the 12c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) * documentation and/or other materials provided with the distribution. 13c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) * 3. Neither the name of Apple Computer, Inc. ("Apple") nor the names of 14c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) * its contributors may be used to endorse or promote products derived 15c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) * from this software without specific prior written permission. 16c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) * 17c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY 18c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 19c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 20c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY 21c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 22c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 23c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 24c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 25c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 26c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 27c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) */ 28c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) 29c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)#include "config.h" 301e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)#include "core/frame/Console.h" 31c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) 32197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch#include "bindings/core/v8/ScriptCallStackFactory.h" 33c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)#include "core/inspector/InspectorConsoleInstrumentation.h" 34197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch#include "core/inspector/InspectorTraceEvents.h" 35c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)#include "core/inspector/ScriptArguments.h" 361e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)#include "platform/TraceEvent.h" 37c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)#include "wtf/text/CString.h" 38c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)#include "wtf/text/WTFString.h" 39c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) 40c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)namespace blink { 41c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) 42c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)ConsoleBase::~ConsoleBase() 43c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles){ 44c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)} 45c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) 465d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)void ConsoleBase::debug(ScriptState* scriptState, PassRefPtrWillBeRawPtr<ScriptArguments> arguments) 47c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles){ 48f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu internalAddMessage(LogMessageType, DebugMessageLevel, scriptState, arguments); 49c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)} 50c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) 515d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)void ConsoleBase::error(ScriptState* scriptState, PassRefPtrWillBeRawPtr<ScriptArguments> arguments) 52c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles){ 53f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu internalAddMessage(LogMessageType, ErrorMessageLevel, scriptState, arguments); 54c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)} 55c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) 565d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)void ConsoleBase::info(ScriptState* scriptState, PassRefPtrWillBeRawPtr<ScriptArguments> arguments) 57c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles){ 58f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu internalAddMessage(LogMessageType, InfoMessageLevel, scriptState, arguments); 59c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)} 60c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) 615d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)void ConsoleBase::log(ScriptState* scriptState, PassRefPtrWillBeRawPtr<ScriptArguments> arguments) 62c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles){ 63f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu internalAddMessage(LogMessageType, LogMessageLevel, scriptState, arguments); 64c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)} 65c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) 665d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)void ConsoleBase::warn(ScriptState* scriptState, PassRefPtrWillBeRawPtr<ScriptArguments> arguments) 67c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles){ 68f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu internalAddMessage(LogMessageType, WarningMessageLevel, scriptState, arguments); 69c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)} 70c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) 715d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)void ConsoleBase::dir(ScriptState* scriptState, PassRefPtrWillBeRawPtr<ScriptArguments> arguments) 72c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles){ 73f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu internalAddMessage(DirMessageType, LogMessageLevel, scriptState, arguments); 74c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)} 75c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) 765d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)void ConsoleBase::dirxml(ScriptState* scriptState, PassRefPtrWillBeRawPtr<ScriptArguments> arguments) 77c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles){ 78f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu internalAddMessage(DirXMLMessageType, LogMessageLevel, scriptState, arguments); 79c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)} 80c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) 815d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)void ConsoleBase::table(ScriptState* scriptState, PassRefPtrWillBeRawPtr<ScriptArguments> arguments) 82c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles){ 83f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu internalAddMessage(TableMessageType, LogMessageLevel, scriptState, arguments); 84c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)} 85c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) 865d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)void ConsoleBase::clear(ScriptState* scriptState, PassRefPtrWillBeRawPtr<ScriptArguments> arguments) 87c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles){ 889e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles) internalAddMessage(ClearMessageType, LogMessageLevel, scriptState, arguments, true); 89c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)} 90c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) 915d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)void ConsoleBase::trace(ScriptState* scriptState, PassRefPtrWillBeRawPtr<ScriptArguments> arguments) 92c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles){ 93f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu internalAddMessage(TraceMessageType, LogMessageLevel, scriptState, arguments, true, true); 94c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)} 95c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) 965d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)void ConsoleBase::assertCondition(ScriptState* scriptState, PassRefPtrWillBeRawPtr<ScriptArguments> arguments, bool condition) 97c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles){ 98c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) if (condition) 99c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) return; 100c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) 101f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu internalAddMessage(AssertMessageType, ErrorMessageLevel, scriptState, arguments, true); 102c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)} 103c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) 1045d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)void ConsoleBase::count(ScriptState* scriptState, PassRefPtrWillBeRawPtr<ScriptArguments> arguments) 105c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles){ 1067242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci RefPtrWillBeRawPtr<ScriptCallStack> callStack(createScriptCallStackForConsole(1)); 1077242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci const ScriptCallFrame& lastCaller = callStack->at(0); 1087242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci // Follow Firebug's behavior of counting with null and undefined title in 1097242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci // the same bucket as no argument 1107242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci String title; 1117242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci arguments->getFirstArgumentAsString(title); 1127242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci String identifier = title.isEmpty() ? String(lastCaller.sourceURL() + ':' + String::number(lastCaller.lineNumber())) 1137242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci : String(title + '@'); 1147242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci 1157242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci HashCountedSet<String>::AddResult result = m_counts.add(identifier); 1167242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci String message = title + ": " + String::number(result.storedValue->value); 1177242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci 1187242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci RefPtrWillBeRawPtr<ConsoleMessage> consoleMessage = ConsoleMessage::create(ConsoleAPIMessageSource, DebugMessageLevel, message); 1197242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci consoleMessage->setType(CountMessageType); 1207242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci consoleMessage->setScriptState(scriptState); 1217242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci consoleMessage->setCallStack(callStack.release()); 1227242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci reportMessageToConsole(consoleMessage.release()); 123c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)} 124c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) 1259bbd2f5e390b01907d97ecffde80aa1b06113aacTorne (Richard Coles)void ConsoleBase::markTimeline(const String& title) 126c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles){ 127197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch timeStamp(title); 128c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)} 129c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) 130e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)void ConsoleBase::profile(const String& title) 131c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles){ 132e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) InspectorInstrumentation::consoleProfile(context(), title); 133c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)} 134c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) 135e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)void ConsoleBase::profileEnd(const String& title) 136c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles){ 137e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) InspectorInstrumentation::consoleProfileEnd(context(), title); 138c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)} 139c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) 140c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)void ConsoleBase::time(const String& title) 141c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles){ 1429bbd2f5e390b01907d97ecffde80aa1b06113aacTorne (Richard Coles) InspectorInstrumentation::consoleTime(context(), title); 143197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch TRACE_EVENT_COPY_ASYNC_BEGIN0("blink.console", title.utf8().data(), this); 1447242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci 1457242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci if (title.isNull()) 1467242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci return; 1477242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci 1487242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci m_times.add(title, monotonicallyIncreasingTime()); 149c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)} 150c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) 151f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liuvoid ConsoleBase::timeEnd(ScriptState* scriptState, const String& title) 152c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles){ 153197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch TRACE_EVENT_COPY_ASYNC_END0("blink.console", title.utf8().data(), this); 154f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu InspectorInstrumentation::consoleTimeEnd(context(), title, scriptState); 1557242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci 1567242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci // Follow Firebug's behavior of requiring a title that is not null or 1577242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci // undefined for timing functions 1587242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci if (title.isNull()) 1597242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci return; 1607242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci 1617242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci HashMap<String, double>::iterator it = m_times.find(title); 1627242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci if (it == m_times.end()) 1637242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci return; 1647242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci 1657242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci double startTime = it->value; 1667242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci m_times.remove(it); 1677242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci 1687242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci double elapsed = monotonicallyIncreasingTime() - startTime; 1697242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci String message = title + String::format(": %.3fms", elapsed * 1000); 1707242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci 1717242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci RefPtrWillBeRawPtr<ConsoleMessage> consoleMessage = ConsoleMessage::create(ConsoleAPIMessageSource, DebugMessageLevel, message); 1727242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci consoleMessage->setType(TimeEndMessageType); 1737242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci consoleMessage->setScriptState(scriptState); 1747242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci consoleMessage->setCallStack(createScriptCallStackForConsole(1)); 1757242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci reportMessageToConsole(consoleMessage.release()); 1769bbd2f5e390b01907d97ecffde80aa1b06113aacTorne (Richard Coles)} 1779bbd2f5e390b01907d97ecffde80aa1b06113aacTorne (Richard Coles) 1789bbd2f5e390b01907d97ecffde80aa1b06113aacTorne (Richard Coles)void ConsoleBase::timeStamp(const String& title) 1799bbd2f5e390b01907d97ecffde80aa1b06113aacTorne (Richard Coles){ 180197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch TRACE_EVENT_INSTANT1(TRACE_DISABLED_BY_DEFAULT("devtools.timeline"), "TimeStamp", "data", InspectorTimeStampEvent::data(context(), title)); 181197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch // FIXME(361045): remove InspectorInstrumentation calls once DevTools Timeline migrates to tracing. 1829bbd2f5e390b01907d97ecffde80aa1b06113aacTorne (Richard Coles) InspectorInstrumentation::consoleTimeStamp(context(), title); 1839bbd2f5e390b01907d97ecffde80aa1b06113aacTorne (Richard Coles)} 1849bbd2f5e390b01907d97ecffde80aa1b06113aacTorne (Richard Coles) 1857242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tuccistatic String formatTimelineTitle(const String& title) 1867242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci{ 1877242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci return String::format("Timeline '%s'", title.utf8().data()); 1887242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci} 1897242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci 190f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liuvoid ConsoleBase::timeline(ScriptState* scriptState, const String& title) 1919bbd2f5e390b01907d97ecffde80aa1b06113aacTorne (Richard Coles){ 1927242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci // FIXME(361045): remove InspectorInstrumentation calls once DevTools Timeline migrates to tracing. 193f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu InspectorInstrumentation::consoleTimeline(context(), title, scriptState); 1947242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci 1957242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci TRACE_EVENT_COPY_ASYNC_BEGIN0("blink.console", formatTimelineTitle(title).utf8().data(), this); 196c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)} 197c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) 198f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liuvoid ConsoleBase::timelineEnd(ScriptState* scriptState, const String& title) 199c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles){ 2007242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci // FIXME(361045): remove InspectorInstrumentation calls once DevTools Timeline migrates to tracing. 201f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu InspectorInstrumentation::consoleTimelineEnd(context(), title, scriptState); 2027242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci 2037242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci TRACE_EVENT_COPY_ASYNC_END0("blink.console", formatTimelineTitle(title).utf8().data(), this); 204c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)} 205c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) 2065d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)void ConsoleBase::group(ScriptState* scriptState, PassRefPtrWillBeRawPtr<ScriptArguments> arguments) 207c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles){ 2089e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles) internalAddMessage(StartGroupMessageType, LogMessageLevel, scriptState, arguments, true); 209c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)} 210c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) 2115d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)void ConsoleBase::groupCollapsed(ScriptState* scriptState, PassRefPtrWillBeRawPtr<ScriptArguments> arguments) 212c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles){ 2139e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles) internalAddMessage(StartGroupCollapsedMessageType, LogMessageLevel, scriptState, arguments, true); 214c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)} 215c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) 216c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)void ConsoleBase::groupEnd() 217c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles){ 2189e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles) internalAddMessage(EndGroupMessageType, LogMessageLevel, nullptr, nullptr, true); 219c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)} 220c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) 2215d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)void ConsoleBase::internalAddMessage(MessageType type, MessageLevel level, ScriptState* scriptState, PassRefPtrWillBeRawPtr<ScriptArguments> scriptArguments, bool acceptNoArguments, bool printTrace) 222c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles){ 2235d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) RefPtrWillBeRawPtr<ScriptArguments> arguments = scriptArguments; 2249e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles) if (!acceptNoArguments && (!arguments || !arguments->argumentCount())) 225c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) return; 226c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) 2279e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles) String message; 2289e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles) bool gotStringMessage = arguments ? arguments->getFirstArgumentAsString(message) : false; 2299e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles) 2309e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles) RefPtrWillBeRawPtr<ConsoleMessage> consoleMessage = ConsoleMessage::create(ConsoleAPIMessageSource, level, gotStringMessage? message : String()); 2319e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles) consoleMessage->setType(type); 2329e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles) consoleMessage->setScriptState(scriptState); 2339e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles) consoleMessage->setScriptArguments(arguments); 2349e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles) 235c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) size_t stackSize = printTrace ? ScriptCallStack::maxCallStackSizeToCapture : 1; 2367242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci consoleMessage->setCallStack(createScriptCallStackForConsole(stackSize)); 2379e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles) reportMessageToConsole(consoleMessage.release()); 238c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)} 239c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) 240c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)} // namespace blink 241