Blame src/libpfm-3.y/python/src/perfmon_int.i

Packit 577717
/*
Packit 577717
Packit 577717
 * Copyright (c) 2008 Google, Inc.
Packit 577717
 * Contributed by Arun Sharma <arun.sharma@google.com>
Packit 577717
 * 
Packit 577717
 * Permission is hereby granted, free of charge, to any person obtaining a
Packit 577717
 * copy of this software and associated documentation files (the "Software"),
Packit 577717
 * to deal in the Software without restriction, including without limitation
Packit 577717
 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
Packit 577717
 * and/or sell copies of the Software, and to permit persons to whom the
Packit 577717
 * Software is furnished to do so, subject to the following conditions:
Packit 577717
 * 
Packit 577717
 * The above copyright notice and this permission notice shall be included
Packit 577717
 * in all copies or substantial portions of the Software.
Packit 577717
 * 
Packit 577717
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
Packit 577717
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
Packit 577717
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
Packit 577717
 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
Packit 577717
 * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
Packit 577717
 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
Packit 577717
 * OTHER DEALINGS IN THE SOFTWARE.
Packit 577717
 * 
Packit 577717
 * Python Bindings for perfmon.
Packit 577717
 */
Packit 577717
%module perfmon_int
Packit 577717
%{
Packit 577717
#include <perfmon/perfmon.h>
Packit 577717
#include <perfmon/pfmlib.h>
Packit 577717
Packit 577717
static PyObject *libpfm_err;
Packit 577717
%}
Packit 577717
Packit 577717
%include "carrays.i"
Packit 577717
%include "cstring.i"
Packit 577717
%include <stdint.i>
Packit 577717
Packit 577717
/* Some typemaps for corner cases SWIG can't handle */
Packit 577717
/* Convert from Python --> C */
Packit 577717
%typemap(memberin) pfmlib_event_t[ANY] {
Packit 577717
  int i;
Packit 577717
  for (i = 0; i < $1_dim0; i++) {
Packit 577717
      $1[i] = $input[i];
Packit 577717
  }
Packit 577717
}
Packit 577717
Packit 577717
%typemap(out) pfmlib_event_t[ANY] {  
Packit 577717
  int len, i;
Packit 577717
  len = $1_dim0;
Packit 577717
  $result = PyList_New(len);
Packit 577717
  for (i = 0; i < len; i++) {
Packit 577717
    PyObject *o = SWIG_NewPointerObj(SWIG_as_voidptr(&$1[i]),
Packit 577717
                                     SWIGTYPE_p_pfmlib_event_t, 0 |  0 );
Packit 577717
    PyList_SetItem($result, i, o);
Packit 577717
  }
Packit 577717
}
Packit 577717
Packit 577717
/* Convert from Python --> C */
Packit 577717
%typemap(memberin) pfmlib_reg_t[ANY] {
Packit 577717
  int i;
Packit 577717
  for (i = 0; i < $1_dim0; i++) {
Packit 577717
      $1[i] = $input[i];
Packit 577717
  }
Packit 577717
}
Packit 577717
Packit 577717
%typemap(out) pfmlib_reg_t[ANY] {  
Packit 577717
  int len, i;
Packit 577717
  len = $1_dim0;
Packit 577717
  $result = PyList_New(len);
Packit 577717
  for (i = 0; i < len; i++) {
Packit 577717
    PyObject *o = SWIG_NewPointerObj(SWIG_as_voidptr(&$1[i]),
Packit 577717
                                     SWIGTYPE_p_pfmlib_reg_t, 0 |  0 );
Packit 577717
    PyList_SetItem($result, i, o);
Packit 577717
  }
Packit 577717
}
Packit 577717
Packit 577717
/* Convert libpfm errors into exceptions */
Packit 577717
%typemap(out) os_err_t {  
Packit 577717
  if (result == -1) {
Packit 577717
    PyErr_SetFromErrno(PyExc_OSError);
Packit 577717
    SWIG_fail;
Packit 577717
  } 
Packit 577717
  resultobj = SWIG_From_int((int)(result));
Packit 577717
};
Packit 577717
Packit 577717
%typemap(out) pfm_err_t {  
Packit 577717
  if (result != PFMLIB_SUCCESS) {
Packit 577717
    PyObject *obj = Py_BuildValue("(i,s)", result, 
Packit 577717
                                  pfm_strerror(result));
Packit 577717
    PyErr_SetObject(libpfm_err, obj);
Packit 577717
    SWIG_fail;
Packit 577717
  } else {
Packit 577717
    PyErr_Clear();
Packit 577717
  }
Packit 577717
  resultobj = SWIG_From_int((int)(result));
Packit 577717
}
Packit 577717
Packit 577717
/* Convert libpfm errors into exceptions */
Packit 577717
%typemap(out) os_err_t {  
Packit 577717
  if (result == -1) {
Packit 577717
    PyErr_SetFromErrno(PyExc_OSError);
Packit 577717
    SWIG_fail;
Packit 577717
  } 
Packit 577717
  resultobj = SWIG_From_int((int)(result));
Packit 577717
};
Packit 577717
Packit 577717
%typemap(out) pfm_err_t {  
Packit 577717
  if (result != PFMLIB_SUCCESS) {
Packit 577717
    PyObject *obj = Py_BuildValue("(i,s)", result, 
Packit 577717
                                  pfm_strerror(result));
Packit 577717
    PyErr_SetObject(libpfm_err, obj);
Packit 577717
    SWIG_fail;
Packit 577717
  } else {
Packit 577717
    PyErr_Clear();
Packit 577717
  }
Packit 577717
  resultobj = SWIG_From_int((int)(result));
Packit 577717
}
Packit 577717
Packit 577717
%cstring_output_maxsize(char *name, size_t maxlen)
Packit 577717
%cstring_output_maxsize(char *name, int maxlen)
Packit 577717
Packit 577717
%extend pfmlib_regmask_t {
Packit 577717
  unsigned int weight() {
Packit 577717
    unsigned int w = 0;
Packit 577717
    pfm_regmask_weight($self, &w);
Packit 577717
    return w;
Packit 577717
  }
Packit 577717
}
Packit 577717
Packit 577717
/* Kernel interface */
Packit 577717
%include <perfmon/perfmon.h>
Packit 577717
%array_class(pfarg_pmc_t, pmc)
Packit 577717
%array_class(pfarg_pmd_t, pmd)
Packit 577717
Packit 577717
/* Library interface */
Packit 577717
%include <perfmon/pfmlib.h>
Packit 577717
Packit 577717
%extend pfarg_ctx_t {
Packit 577717
  void zero() {
Packit 577717
    memset(self, 0, sizeof(self));
Packit 577717
  }
Packit 577717
}
Packit 577717
Packit 577717
%extend pfarg_load_t {
Packit 577717
  void zero() {
Packit 577717
    memset(self, 0, sizeof(self));
Packit 577717
  }
Packit 577717
}
Packit 577717
Packit 577717
Packit 577717
%init %{
Packit 577717
  libpfm_err = PyErr_NewException("perfmon.libpfmError", NULL, NULL);
Packit 577717
  PyDict_SetItemString(d, "libpfmError", libpfm_err); 
Packit 577717
%}
Packit 577717
Packit 577717
%inline %{
Packit 577717
/* Helper functions to avoid pointer classes */
Packit 577717
int pfm_py_get_pmu_type(void) {
Packit 577717
  int tmp = -1;
Packit 577717
  pfm_get_pmu_type(&tmp);
Packit 577717
  return tmp;
Packit 577717
}
Packit 577717
Packit 577717
unsigned int pfm_py_get_hw_counter_width(void) {
Packit 577717
  unsigned int tmp = 0;
Packit 577717
  pfm_get_hw_counter_width(&tmp);
Packit 577717
  return tmp;
Packit 577717
}
Packit 577717
Packit 577717
unsigned int pfm_py_get_num_events(void) {
Packit 577717
  unsigned int tmp = 0;
Packit 577717
  pfm_get_num_events(&tmp);
Packit 577717
  return tmp;
Packit 577717
}
Packit 577717
Packit 577717
int pfm_py_get_event_code(int idx) {
Packit 577717
  int tmp = 0;
Packit 577717
  pfm_get_event_code(idx, &tmp);
Packit 577717
  return tmp;
Packit 577717
}
Packit 577717
Packit 577717
unsigned int pfm_py_get_num_event_masks(int idx) {
Packit 577717
  unsigned int tmp = 0;
Packit 577717
  pfm_get_num_event_masks(idx, &tmp);
Packit 577717
  return tmp;
Packit 577717
}
Packit 577717
Packit 577717
unsigned int pfm_py_get_event_mask_code(int idx, int i) {
Packit 577717
  unsigned int tmp = 0;
Packit 577717
  pfm_get_event_mask_code(idx, i, &tmp);
Packit 577717
  return tmp;
Packit 577717
}
Packit 577717
Packit 577717
#define PFMON_MAX_EVTNAME_LEN   128
Packit 577717
Packit 577717
PyObject *pfm_py_get_event_name(int idx) {
Packit 577717
  char name[PFMON_MAX_EVTNAME_LEN];
Packit 577717
Packit 577717
  pfm_get_event_name(idx, name, PFMON_MAX_EVTNAME_LEN);
Packit 577717
  return PyString_FromString(name);
Packit 577717
}
Packit 577717
Packit 577717
PyObject *pfm_py_get_event_mask_name(int idx, int i) {
Packit 577717
  char name[PFMON_MAX_EVTNAME_LEN];
Packit 577717
Packit 577717
  pfm_get_event_mask_name(idx, i, name, PFMON_MAX_EVTNAME_LEN);
Packit 577717
  return PyString_FromString(name);
Packit 577717
}
Packit 577717
Packit 577717
PyObject *pfm_py_get_event_description(int idx) {
Packit 577717
  char *desc;
Packit 577717
  PyObject *ret;
Packit 577717
  pfm_get_event_description(idx, &desc);
Packit 577717
  ret = PyString_FromString(desc);
Packit 577717
  free(desc);
Packit 577717
  return ret;
Packit 577717
}
Packit 577717
Packit 577717
PyObject *pfm_py_get_event_mask_description(int idx, int i) {
Packit 577717
  char *desc;
Packit 577717
  PyObject *ret;
Packit 577717
  pfm_get_event_mask_description(idx, i, &desc);
Packit 577717
  ret = PyString_FromString(desc);
Packit 577717
  free(desc);
Packit 577717
  return ret;
Packit 577717
}
Packit 577717
Packit 577717
%}