2016-10-02 21:22:49 +00:00
// Copyright 2016 the V8 project authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
2017-05-19 00:35:45 +00:00
let { session , contextGroup , Protocol } = InspectorTest . start ( "Tests that console.profile/profileEnd will record CPU profile when inspector front-end is connected." ) ;
2016-10-02 21:22:49 +00:00
2017-05-19 00:35:45 +00:00
contextGroup . addScript ( `
2016-10-02 21:22:49 +00:00
function collectProfiles ( )
{
console . profile ( "outer" ) ;
console . profile ( 42 ) ;
console . profileEnd ( "outer" ) ;
console . profileEnd ( 42 ) ;
} ` );
InspectorTest . fail = function ( message )
{
InspectorTest . log ( "FAIL: " + message ) ;
InspectorTest . completeTest ( ) ;
}
2016-10-03 23:32:52 +00:00
Protocol . Profiler . enable ( ) ;
Protocol . Runtime . evaluate ( { expression : "collectProfiles()" } ) . then ( didCollectProfiles ) ;
2016-10-02 21:22:49 +00:00
var headers = [ ] ;
2016-10-03 23:32:52 +00:00
Protocol . Profiler . onConsoleProfileFinished ( function ( messageObject )
2016-10-02 21:22:49 +00:00
{
headers . push ( {
profile : messageObject [ "params" ] [ "profile" ] ,
title : messageObject [ "params" ] [ "title" ]
} ) ;
2016-10-03 23:32:52 +00:00
} ) ;
2016-10-02 21:22:49 +00:00
function didCollectProfiles ( messageObject )
{
if ( headers . length !== 2 )
return InspectorTest . fail ( "Cannot retrive headers: " + JSON . stringify ( messageObject , null , 4 ) ) ;
for ( var i = 0 ; i < headers . length ; i ++ ) {
if ( headers [ i ] . title === "42" ) {
checkInnerProfile ( headers [ i ] . profile ) ;
return ;
}
}
InspectorTest . fail ( "Cannot find '42' profile header" ) ;
}
function checkInnerProfile ( profile )
{
InspectorTest . log ( "SUCCESS: retrieved '42' profile" ) ;
if ( ! findFunctionInProfile ( profile . nodes , "collectProfiles" ) )
return InspectorTest . fail ( "collectProfiles function not found in the profile: " + JSON . stringify ( profile , null , 4 ) ) ;
InspectorTest . log ( "SUCCESS: found 'collectProfiles' function in the profile" ) ;
InspectorTest . completeTest ( ) ;
}
function findFunctionInProfile ( nodes , functionName )
{
return nodes . some ( n => n . callFrame . functionName === functionName ) ;
}