/* * DebuggingSupport.js * Keynote HTML Player * * Responsibility: Tungwei Cheng * Copyright (c) 2009-2013 Apple Inc. All rights reserved. */ // Set this to "false" to disable ALL debugging logic var gDebug = false; // Set this to "false" to disable debug messages when running on the iPhone or iPad var gDebugOnMobile = false; // Globals: // =============================================================== var gNumDebugMessagesSent = 0; var gNumDebugMessagesQueued = 0; var gDebugMessageQueue = new Array(); var gDebugMessageRequest = null; var gDebugLastClassName = ""; var gDebugLastMethodName = ""; // Enable these constants to simulate various conditions/errors: var gDebugSimulateSlowTextureDownload = false; var gDebugSimulateTextureLoadFailure = false; var gDebugSimulateScriptDownloadFailure = false; // Constants: // =============================================================== var kDebugFunction = "function"; var kDebugSurpressMessage = "!NoOp_!NoOp"; //---------------------------------------------------------------------- var kDebugSetupShowController = kDebugFunction + "_" + "setupShowController"; //---------------------------------------------------------------------- var kDebugShowController = "!ShowController"; var kDebugShowController_AdvanceToNextBuild = kDebugShowController + "_" + "!advanceToNextBuild"; var kDebugShowController_AdvanceToNextSlide = kDebugShowController + "_" + "!advanceToNextSlide"; var kDebugShowController_DoIdleProcessing = kDebugShowController + "_" + "!doIdleProcessing"; var kDebugShowController_GoBackToPreviousBuild = kDebugShowController + "_" + "!goBackToPreviousBuild"; var kDebugShowController_GoBackToPreviousSlide = kDebugShowController + "_" + "!goBackToPreviousSlide"; var kDebugShowController_HandleScriptDidDownloadEvent = kDebugShowController + "_" + "!handleScriptDidDownloadEvent"; var kDebugShowController_HandleScriptDidNotDownloadEvent = kDebugShowController + "_" + "!handleScriptDidNotDownloadEvent"; var kDebugShowController_JumpToScene = kDebugShowController + "_" + "!jumpToScene"; var kDebugShowController_OnKeyPress = kDebugShowController + "_" + "!onKeyPress"; //---------------------------------------------------------------------- var kDebugTouchController = "!TouchController"; var kDebugTouchController_HandleGestureEndEvent = kDebugTouchController + "_" + "!handleGestureEndEvent"; var kDebugTouchController_HandleGestureStartEvent = kDebugTouchController + "_" + "!handleGestureStartEvent"; var kDebugTouchController_HandleTouchCancelEvent = kDebugTouchController + "_" + "!handleTouchCancelEvent"; var kDebugTouchController_HandleTouchCancelEvent = kDebugTouchController + "_" + "!handleTouchMoveEvent"; var kDebugTouchController_HandleTouchEndEvent = kDebugTouchController + "_" + "!handleTouchEndEvent"; var kDebugTouchController_HandleTouchStartEvent = kDebugTouchController + "_" + "!handleTouchStartEvent"; var kDebugTouchController_Initialize = kDebugTouchController + "_" + "!initialize"; var kDebugTouchController_IsTouchWithinTrackArea = kDebugTouchController + "_" + "!isTouchWithinTrackArea"; var kDebugTouchController_SetTrackArea = kDebugTouchController + "_" + "!setTrackArea"; //---------------------------------------------------------------------- var kDebugScriptMangaer = "!ScriptManager"; var kDebugScriptMangaer_DownloadScript = kDebugScriptMangaer + "_" + "!downloadScript"; //---------------------------------------------------------------------- var kDebugTimer = "DebugTimer"; var kDebugTimer_AdvanceToNextBuild = kDebugTimer + "_" + "!advanceToNextBuild"; var kDebugTimer_CreateAnimationsForScene = kDebugTimer + "_" + "!createAnimationsForScene"; var kDebugTimer_ApplyAnimationsForScene = kDebugTimer + "_" + "!applyAnimationsForScene"; var kDebugTimer_PreProcessSceneAnimations = kDebugTimer + "_" + "!preProcessSceneAnimations"; var kDebugTimer_AdvanceToNextBuild_to_ApplyAnimations = kDebugTimer + "_" + "!preProcessSceneAnimations_to_ApplyAnimations"; var kDebugTimer_JumpToScene = kDebugTimer + "_" + "!jumpToScene"; var kDebugTimer_DisplayScene = kDebugTimer + "_" + "!displayScene"; // Functions: // =============================================================== function debugWarning(sender, messageText) { if (gDebug === false) { return; } debugSendMessage(sender, "WARNING: " + messageText, true); } function debugMessageAlways(sender, messageText) { debugSendMessage(sender, messageText, true); } function debugMessage(sender, messageText) { if (gDebug == false) { return; } if ((gDevice == kDeviceMobile) && (gDebugOnMobile == false)) { return; } debugSendMessage(sender, messageText, false); } function debugSendMessage(sender, messageText, always) { var indexOfUnderscore = sender.indexOf("_"); var className = sender.substring(0, indexOfUnderscore); var methodName = sender.substring(indexOfUnderscore + 1); var suppress = false; if (className[0] == "!") { className = className.substring(1); suppress = true; } if (methodName[0] == "!") { methodName = methodName.substring(1); suppress = true; } if (methodName[0] == "+") { methodName = methodName.substring(1); always = true; } if ((suppress == true) && (always == false)) { return; } var prefix = ""; if (messageText == null) { messageText = ""; } if (messageText[0] != "-" || className != gDebugLastClassName || methodName != gDebugLastMethodName) { if (className == kDebugTimer) { prefix = sender + ": "; } else if (className == kDebugFunction) { prefix = methodName + "() "; } else { prefix = className + "." + methodName + "() "; } } else { prefix = ""; } gDebugLastClassName = className; gDebugLastMethodName = methodName; if (gDevice == kDeviceMobile) { gNumDebugMessagesSent++; var formattedMessageText = escape(gNumDebugMessagesSent + ": " + prefix + messageText); gDebugMessageQueue[gNumDebugMessagesQueued] = formattedMessageText; gNumDebugMessagesQueued++; if (gNumDebugMessagesQueued == 1) { debugCheckMessageQueue(); } } else { if (window.console) { window.console.log( prefix + messageText ); } } } function debugSendNextMessageInQueue() { var formattedMessageText = gDebugMessageQueue[0]; gNumDebugMessagesQueued--; gDebugMessageQueue.splice(0,1); var messageUrl = '/debugMessage.rhtml?message="' + formattedMessageText + '"'; new Ajax.Request( messageUrl, { method: "get", onSuccess: function(transport) {debugMessageWasSent(transport);}, onFailure: function(transport) {debugMessageWasNotSent(transport);} }); } function debugMessageWasSent(transport) { debugCheckMessageQueue(); } function debugMessageWasNotSent(transport) { debugCheckMessageQueue(); } function debugCheckMessageQueue() { if (gNumDebugMessagesQueued > 0) { setTimeout(debugSendNextMessageInQueue, 10); } } var DebugTimer = Class.create({ initialize: function(timerId) { var indexOfUnderscore = timerId.indexOf("_"); var timerName = timerId.substring( indexOfUnderscore + 1 ); if (timerName[0] != "!") { this.id = timerId; this.startTime = new Date(); debugMessageAlways(timerId, "Start"); } else { this.startTime = null; } }, stop: function() { if (this.startTime != null) { var endTime = new Date(); var elapsedTime = endTime - this.startTime; debugMessageAlways(this.id , "Stop - Elapsed Time: " + elapsedTime); } } }); function debugStopTimer(timer) { if (timer) { timer.stop(); } } var debugDomDumpLineNumber = 0; function debugDumpDomFrom(rootObject, context) { var kDebugDumpDomFrom = kDebugFunction + "_" + "debugDumpDomFrom"; debugDomDumpLineNumber = 0; debugMessageAlways(kDebugDumpDomFrom, "------------------ S T A R T O F D O M D U M P --- Context: " + context); debugRecursivelyDumpDomFrom(rootObject, ""); debugMessageAlways(kDebugDumpDomFrom, "------------------ E N D O F D O M D U M P"); } function debugRecursivelyDumpDomFrom(object, indentPadding) { var kDebugRecursivelyDumpDomFrom = kDebugFunction + "_" + "recursivelyDumpDomFrom"; var objectId = object.id; var objectTag = object.nodeName.toLowerCase(); if (objectTag == "#text") { return; } debugMessageAlways( kDebugRecursivelyDumpDomFrom, "-" + (debugDomDumpLineNumber++) + indentPadding + "<" + objectTag + " id='" + objectId + "'>"); var iChild; for (iChild = 0; iChild < object.childNodes.length; iChild++) { var child = object.childNodes[iChild]; recursivelyDumpDomFrom(child, indentPadding + " "); } if (objectTag == "img") { return; } debugMessageAlways(kDebugRecursivelyDumpDomFrom, "-" + (debugDomDumpLineNumber++) + indentPadding + ""); }