pstats on individual field updates

This commit is contained in:
David Rose 2004-11-22 23:25:20 +00:00
parent caad633fd7
commit cbf0b4ab88
8 changed files with 63 additions and 9 deletions

View File

@ -30,7 +30,7 @@
// Description: // Description:
//////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////
DCAtomicField:: DCAtomicField::
DCAtomicField(const string &name) : DCField(name) { DCAtomicField(const string &name, DCClass *dclass) : DCField(name, dclass) {
} }
//////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////

View File

@ -37,7 +37,7 @@
//////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////
class EXPCL_DIRECT DCAtomicField : public DCField { class EXPCL_DIRECT DCAtomicField : public DCField {
public: public:
DCAtomicField(const string &name); DCAtomicField(const string &name, DCClass *dclass);
virtual ~DCAtomicField(); virtual ~DCAtomicField();
PUBLISHED: PUBLISHED:

View File

@ -134,6 +134,8 @@ private:
#ifdef HAVE_PYTHON #ifdef HAVE_PYTHON
PyObject *_class_def; PyObject *_class_def;
#endif #endif
friend class DCField;
}; };
#include "dcClass.I" #include "dcClass.I"

View File

@ -18,16 +18,52 @@
#include "dcField.h" #include "dcField.h"
#include "dcPacker.h" #include "dcPacker.h"
#include "dcClass.h"
#include "hashGenerator.h" #include "hashGenerator.h"
#include "dcmsgtypes.h" #include "dcmsgtypes.h"
#ifdef WITHIN_PANDA
#include "pStatTimer.h"
#endif
//////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////
// Function: DCField::Constructor // Function: DCField::Constructor
// Access: Public // Access: Public
// Description: // Description:
//////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////
DCField:: DCField::
DCField(const string &name) : DCPackerInterface(name) { DCField()
#ifdef WITHIN_PANDA
: _field_update_pcollector("DCField")
#endif
{
_number = -1;
_flags = 0;
_has_default_value = false;
_default_value_stale = true;
_has_nested_fields = true;
_num_nested_fields = 0;
_pack_type = PT_field;
_has_fixed_byte_size = true;
_fixed_byte_size = 0;
_has_fixed_structure = true;
}
////////////////////////////////////////////////////////////////////
// Function: DCField::Constructor
// Access: Public
// Description:
////////////////////////////////////////////////////////////////////
DCField::
DCField(const string &name, DCClass *dclass) :
DCPackerInterface(name)
#ifdef WITHIN_PANDA
,
_field_update_pcollector(dclass->_class_update_pcollector, name)
#endif
{
_number = -1; _number = -1;
_flags = 0; _flags = 0;
_has_default_value = false; _has_default_value = false;
@ -479,7 +515,13 @@ receive_update(DCPacker &packer, PyObject *distobj) const {
PyObject *func = PyObject_GetAttrString(distobj, (char *)_name.c_str()); PyObject *func = PyObject_GetAttrString(distobj, (char *)_name.c_str());
nassertv(func != (PyObject *)NULL); nassertv(func != (PyObject *)NULL);
PyObject *result = PyObject_CallObject(func, args); PyObject *result;
{
#ifdef WITHIN_PANDA
PStatTimer timer(((DCField *)this)->_field_update_pcollector);
#endif
result = PyObject_CallObject(func, args);
}
Py_XDECREF(result); Py_XDECREF(result);
Py_DECREF(func); Py_DECREF(func);
Py_DECREF(args); Py_DECREF(args);

View File

@ -23,11 +23,16 @@
#include "dcPackerInterface.h" #include "dcPackerInterface.h"
#include "dcPython.h" #include "dcPython.h"
#ifdef WITHIN_PANDA
#include "pStatCollector.h"
#endif
class DCPacker; class DCPacker;
class DCAtomicField; class DCAtomicField;
class DCMolecularField; class DCMolecularField;
class DCParameter; class DCParameter;
class DCSwitch; class DCSwitch;
class DCClass;
class HashGenerator; class HashGenerator;
//////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////
@ -37,7 +42,8 @@ class HashGenerator;
//////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////
class EXPCL_DIRECT DCField : public DCPackerInterface { class EXPCL_DIRECT DCField : public DCPackerInterface {
public: public:
DCField(const string &name = string()); DCField();
DCField(const string &name, DCClass *dclass);
virtual ~DCField(); virtual ~DCField();
PUBLISHED: PUBLISHED:
@ -127,6 +133,10 @@ private:
int _flags; // A bitmask union of any of the above values. int _flags; // A bitmask union of any of the above values.
string _default_value; string _default_value;
#ifdef WITHIN_PANDA
PStatCollector _field_update_pcollector;
#endif
}; };
#endif #endif

View File

@ -29,7 +29,7 @@
// Description: // Description:
//////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////
DCMolecularField:: DCMolecularField::
DCMolecularField(const string &name) : DCField(name) { DCMolecularField(const string &name, DCClass *dclass) : DCField(name, dclass) {
} }
//////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////

View File

@ -34,7 +34,7 @@ class DCParameter;
//////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////
class EXPCL_DIRECT DCMolecularField : public DCField { class EXPCL_DIRECT DCMolecularField : public DCField {
public: public:
DCMolecularField(const string &name); DCMolecularField(const string &name, DCClass *dclass);
PUBLISHED: PUBLISHED:
virtual DCMolecularField *as_molecular_field(); virtual DCMolecularField *as_molecular_field();

View File

@ -464,7 +464,7 @@ atomic_field:
optional_name '(' optional_name '('
{ {
$$ = current_atomic; $$ = current_atomic;
current_atomic = new DCAtomicField($1); current_atomic = new DCAtomicField($1, current_class);
} }
parameter_list ')' parameter_list ')'
{ {
@ -1154,7 +1154,7 @@ no_server_flags:
molecular_field: molecular_field:
IDENTIFIER ':' IDENTIFIER ':'
{ {
current_molecular = new DCMolecularField($1); current_molecular = new DCMolecularField($1, current_class);
} }
molecular_atom_list molecular_atom_list
{ {