-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
perf trace: Add interface to access perf data from Perl handlers
The Perl scripting support for perf trace allows most of a trace event's data to be accessed directly as handler arguments, but not all of it e.g. the less common fields aren't passed in. To give scripts access to the other fields and/or any other data or metadata in the main perf executable that might be useful, a way to access the C data in perf from Perl is needed; this patch uses the Perl XS facility to do it for the common_xxx event fields not passed to handler functions. Context.pm exports three functions to Perl scripts that access fields for the current event by calling back into perf: common_pc(), common_flags() and common_lock_depth(). Support for common_flags() field values was added to Core.pm and a script used to sanity check these and other basic scripting features, check-perf-trace.pl, was also added. Signed-off-by: Tom Zanussi <tzanussi@gmail.com> Cc: fweisbec@gmail.com Cc: rostedt@goodmis.org Cc: anton@samba.org Cc: hch@infradead.org LKML-Reference: <1259133352-23685-6-git-send-email-tzanussi@gmail.com> Signed-off-by: Ingo Molnar <mingo@elte.hu>
- Loading branch information
Tom Zanussi
authored and
Ingo Molnar
committed
Nov 28, 2009
1 parent
bcefe12
commit d1b9377
Showing
13 changed files
with
474 additions
and
13 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,134 @@ | ||
/* | ||
* This file was generated automatically by ExtUtils::ParseXS version 2.18_02 from the | ||
* contents of Context.xs. Do not edit this file, edit Context.xs instead. | ||
* | ||
* ANY CHANGES MADE HERE WILL BE LOST! | ||
* | ||
*/ | ||
|
||
#line 1 "Context.xs" | ||
/* | ||
* Context.xs. XS interfaces for perf trace. | ||
* | ||
* Copyright (C) 2009 Tom Zanussi <tzanussi@gmail.com> | ||
* | ||
* This program is free software; you can redistribute it and/or modify | ||
* it under the terms of the GNU General Public License as published by | ||
* the Free Software Foundation; either version 2 of the License, or | ||
* (at your option) any later version. | ||
* | ||
* This program is distributed in the hope that it will be useful, | ||
* but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
* GNU General Public License for more details. | ||
* | ||
* You should have received a copy of the GNU General Public License | ||
* along with this program; if not, write to the Free Software | ||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | ||
* | ||
*/ | ||
|
||
#include "EXTERN.h" | ||
#include "perl.h" | ||
#include "XSUB.h" | ||
#include "../../../util/trace-event-perl.h" | ||
|
||
#ifndef PERL_UNUSED_VAR | ||
# define PERL_UNUSED_VAR(var) if (0) var = var | ||
#endif | ||
|
||
#line 41 "Context.c" | ||
|
||
XS(XS_Perf__Trace__Context_get_common_pc); /* prototype to pass -Wmissing-prototypes */ | ||
XS(XS_Perf__Trace__Context_get_common_pc) | ||
{ | ||
#ifdef dVAR | ||
dVAR; dXSARGS; | ||
#else | ||
dXSARGS; | ||
#endif | ||
if (items != 1) | ||
Perl_croak(aTHX_ "Usage: %s(%s)", "Perf::Trace::Context::get_common_pc", "context"); | ||
PERL_UNUSED_VAR(cv); /* -W */ | ||
{ | ||
struct scripting_context * context = INT2PTR(struct scripting_context *,SvIV(ST(0))); | ||
int RETVAL; | ||
dXSTARG; | ||
|
||
RETVAL = get_common_pc(context); | ||
XSprePUSH; PUSHi((IV)RETVAL); | ||
} | ||
XSRETURN(1); | ||
} | ||
|
||
|
||
XS(XS_Perf__Trace__Context_get_common_flags); /* prototype to pass -Wmissing-prototypes */ | ||
XS(XS_Perf__Trace__Context_get_common_flags) | ||
{ | ||
#ifdef dVAR | ||
dVAR; dXSARGS; | ||
#else | ||
dXSARGS; | ||
#endif | ||
if (items != 1) | ||
Perl_croak(aTHX_ "Usage: %s(%s)", "Perf::Trace::Context::get_common_flags", "context"); | ||
PERL_UNUSED_VAR(cv); /* -W */ | ||
{ | ||
struct scripting_context * context = INT2PTR(struct scripting_context *,SvIV(ST(0))); | ||
int RETVAL; | ||
dXSTARG; | ||
|
||
RETVAL = get_common_flags(context); | ||
XSprePUSH; PUSHi((IV)RETVAL); | ||
} | ||
XSRETURN(1); | ||
} | ||
|
||
|
||
XS(XS_Perf__Trace__Context_get_common_lock_depth); /* prototype to pass -Wmissing-prototypes */ | ||
XS(XS_Perf__Trace__Context_get_common_lock_depth) | ||
{ | ||
#ifdef dVAR | ||
dVAR; dXSARGS; | ||
#else | ||
dXSARGS; | ||
#endif | ||
if (items != 1) | ||
Perl_croak(aTHX_ "Usage: %s(%s)", "Perf::Trace::Context::get_common_lock_depth", "context"); | ||
PERL_UNUSED_VAR(cv); /* -W */ | ||
{ | ||
struct scripting_context * context = INT2PTR(struct scripting_context *,SvIV(ST(0))); | ||
int RETVAL; | ||
dXSTARG; | ||
|
||
RETVAL = get_common_lock_depth(context); | ||
XSprePUSH; PUSHi((IV)RETVAL); | ||
} | ||
XSRETURN(1); | ||
} | ||
|
||
#ifdef __cplusplus | ||
extern "C" | ||
#endif | ||
XS(boot_Perf__Trace__Context); /* prototype to pass -Wmissing-prototypes */ | ||
XS(boot_Perf__Trace__Context) | ||
{ | ||
#ifdef dVAR | ||
dVAR; dXSARGS; | ||
#else | ||
dXSARGS; | ||
#endif | ||
const char* file = __FILE__; | ||
|
||
PERL_UNUSED_VAR(cv); /* -W */ | ||
PERL_UNUSED_VAR(items); /* -W */ | ||
XS_VERSION_BOOTCHECK ; | ||
|
||
newXSproto("Perf::Trace::Context::get_common_pc", XS_Perf__Trace__Context_get_common_pc, file, "$"); | ||
newXSproto("Perf::Trace::Context::get_common_flags", XS_Perf__Trace__Context_get_common_flags, file, "$"); | ||
newXSproto("Perf::Trace::Context::get_common_lock_depth", XS_Perf__Trace__Context_get_common_lock_depth, file, "$"); | ||
if (PL_unitcheckav) | ||
call_list(PL_scopestack_ix, PL_unitcheckav); | ||
XSRETURN_YES; | ||
} | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,41 @@ | ||
/* | ||
* Context.xs. XS interfaces for perf trace. | ||
* | ||
* Copyright (C) 2009 Tom Zanussi <tzanussi@gmail.com> | ||
* | ||
* This program is free software; you can redistribute it and/or modify | ||
* it under the terms of the GNU General Public License as published by | ||
* the Free Software Foundation; either version 2 of the License, or | ||
* (at your option) any later version. | ||
* | ||
* This program is distributed in the hope that it will be useful, | ||
* but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
* GNU General Public License for more details. | ||
* | ||
* You should have received a copy of the GNU General Public License | ||
* along with this program; if not, write to the Free Software | ||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | ||
* | ||
*/ | ||
|
||
#include "EXTERN.h" | ||
#include "perl.h" | ||
#include "XSUB.h" | ||
#include "../../../util/trace-event-perl.h" | ||
|
||
MODULE = Perf::Trace::Context PACKAGE = Perf::Trace::Context | ||
PROTOTYPES: ENABLE | ||
|
||
int | ||
get_common_pc(context) | ||
struct scripting_context * context | ||
|
||
int | ||
get_common_flags(context) | ||
struct scripting_context * context | ||
|
||
int | ||
get_common_lock_depth(context) | ||
struct scripting_context * context | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
55 changes: 55 additions & 0 deletions
55
tools/perf/scripts/perl/Perf-Trace-Util/lib/Perf/Trace/Context.pm
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,55 @@ | ||
package Perf::Trace::Context; | ||
|
||
use 5.010000; | ||
use strict; | ||
use warnings; | ||
|
||
require Exporter; | ||
|
||
our @ISA = qw(Exporter); | ||
|
||
our %EXPORT_TAGS = ( 'all' => [ qw( | ||
) ] ); | ||
|
||
our @EXPORT_OK = ( @{ $EXPORT_TAGS{'all'} } ); | ||
|
||
our @EXPORT = qw( | ||
common_pc common_flags common_lock_depth | ||
); | ||
|
||
our $VERSION = '0.01'; | ||
|
||
require XSLoader; | ||
XSLoader::load('Perf::Trace::Context', $VERSION); | ||
|
||
1; | ||
__END__ | ||
=head1 NAME | ||
Perf::Trace::Context - Perl extension for accessing functions in perf. | ||
=head1 SYNOPSIS | ||
use Perf::Trace::Context; | ||
=head1 SEE ALSO | ||
Perf (trace) documentation | ||
=head1 AUTHOR | ||
Tom Zanussi, E<lt>tzanussi@gmail.com<gt> | ||
=head1 COPYRIGHT AND LICENSE | ||
Copyright (C) 2009 by Tom Zanussi | ||
This library is free software; you can redistribute it and/or modify | ||
it under the same terms as Perl itself, either Perl version 5.10.0 or, | ||
at your option, any later version of Perl 5 you may have available. | ||
Alternatively, this software may be distributed under the terms of the | ||
GNU General Public License ("GPL") version 2 as published by the Free | ||
Software Foundation. | ||
=cut |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
struct scripting_context * T_PTR |
Oops, something went wrong.