From c76c7aafea4876a2245ba115039f6a9290c7090e Mon Sep 17 00:00:00 2001 From: Mike Magruder Date: Fri, 28 Feb 2014 14:14:40 -0800 Subject: [PATCH] Tests to ensure that the enter/exit hooks for profiling are solid Add a few more tests of the enter/exit hooks which are used by fb_setprofile() and the profilers in ext_hotprofiler. This closes a few testing holes which have been problematic in the past. Reviewed By: @swtaarrs Differential Revision: D1197142 --- hphp/test/quick/Setprofile_async.php | 60 +++++++++++++ hphp/test/quick/Setprofile_async.php.expectf | 126 +++++++++++++++++++++++++++ 2 files changed, 186 insertions(+) create mode 100644 hphp/test/quick/Setprofile_async.php create mode 100644 hphp/test/quick/Setprofile_async.php.expectf diff --git a/hphp/test/quick/Setprofile_async.php b/hphp/test/quick/Setprofile_async.php new file mode 100644 index 00000000000..4560389ede2 --- /dev/null +++ b/hphp/test/quick/Setprofile_async.php @@ -0,0 +1,60 @@ +join(); + error_log('Finished in gen2'); + return $x; +} + +async function genBar($a) { + error_log('In genBar'); + var_dump($a); + await RescheduleWaitHandle::Create(1, 1); // simulate blocking I/O + error_log('Finished in genBar'); + return $a + 2; +} + +async function genFoo($a) { + error_log('In genFoo'); + var_dump($a); + $a++; + list($x, $y) = await GenArrayWaitHandle::Create( + array( + genBar($a), + genBar($a + 1), + gen2($a + 2) + ) + ); + var_dump($x); + var_dump($y); + error_log('Finished in genFoo'); + return $x + $y; +} + +function proffunc($event, $name, $info) { + echo "** $event $name\n"; +} + +function main($a) { + fb_setprofile('proffunc'); + $result = genFoo($a)->join(); + var_dump($result); + fb_setprofile(null); +} + +main(42); diff --git a/hphp/test/quick/Setprofile_async.php.expectf b/hphp/test/quick/Setprofile_async.php.expectf new file mode 100644 index 00000000000..4d0dbb95286 --- /dev/null +++ b/hphp/test/quick/Setprofile_async.php.expectf @@ -0,0 +1,126 @@ +** exit fb_setprofile +** enter genFoo +** enter error_log +In genFoo +** exit error_log +** enter var_dump +int(42) +** exit var_dump +** enter genBar +** enter error_log +In genBar +** exit error_log +** enter var_dump +int(43) +** exit var_dump +** enter RescheduleWaitHandle::create +** exit RescheduleWaitHandle::create +** enter WaitHandle::getWaitHandle +** exit WaitHandle::getWaitHandle +** exit genBar +** enter genBar +** enter error_log +In genBar +** exit error_log +** enter var_dump +int(44) +** exit var_dump +** enter RescheduleWaitHandle::create +** exit RescheduleWaitHandle::create +** enter WaitHandle::getWaitHandle +** exit WaitHandle::getWaitHandle +** exit genBar +** enter gen2 +** enter error_log +In gen2 +** exit error_log +** enter RescheduleWaitHandle::create +** exit RescheduleWaitHandle::create +** enter WaitHandle::getWaitHandle +** exit WaitHandle::getWaitHandle +** exit gen2 +** enter GenArrayWaitHandle::create +** exit GenArrayWaitHandle::create +** enter WaitHandle::getWaitHandle +** exit WaitHandle::getWaitHandle +** exit genFoo +** enter WaitHandle::join +** enter Exception::__init__ +** enter Exception::initTrace +** enter Exception::getTraceOptions +** exit Exception::getTraceOptions +** enter debug_backtrace +** exit debug_backtrace +** enter array_shift +** exit array_shift +** enter strcasecmp +** exit strcasecmp +** enter strcasecmp +** exit strcasecmp +** enter array_shift +** exit array_shift +** enter strcasecmp +** exit strcasecmp +** enter strcasecmp +** exit strcasecmp +** exit Exception::initTrace +** exit Exception::__init__ +** enter Exception::__construct +** exit Exception::__construct +** enter Continuation::send +** enter genBar$continuation +** enter error_log +Finished in genBar +** exit error_log +** exit genBar$continuation +** exit Continuation::send +** enter Continuation::send +** enter genBar$continuation +** enter error_log +Finished in genBar +** exit error_log +** exit genBar$continuation +** exit Continuation::send +** enter Continuation::send +** enter gen2$continuation +** enter gen1 +** enter error_log +In gen1 +** exit error_log +** enter error_log +Finished in gen1 +** exit error_log +** enter RescheduleWaitHandle::create +** exit RescheduleWaitHandle::create +** enter WaitHandle::getWaitHandle +** exit WaitHandle::getWaitHandle +** exit gen1 +** enter WaitHandle::join +** enter Continuation::send +** enter gen1$continuation +** exit gen1$continuation +** exit Continuation::send +** exit WaitHandle::join +** enter error_log +Finished in gen2 +** exit error_log +** exit gen2$continuation +** exit Continuation::send +** enter Continuation::send +** enter genFoo$continuation +** enter var_dump +int(45) +** exit var_dump +** enter var_dump +int(46) +** exit var_dump +** enter error_log +Finished in genFoo +** exit error_log +** exit genFoo$continuation +** exit Continuation::send +** exit WaitHandle::join +** enter var_dump +int(91) +** exit var_dump +** enter fb_setprofile \ No newline at end of file -- 2.11.4.GIT