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:
////////////////////////////////////////////////////////////////////
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 {
public:
DCAtomicField(const string &name);
DCAtomicField(const string &name, DCClass *dclass);
virtual ~DCAtomicField();
PUBLISHED:

View File

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

View File

@ -18,16 +18,52 @@
#include "dcField.h"
#include "dcPacker.h"
#include "dcClass.h"
#include "hashGenerator.h"
#include "dcmsgtypes.h"
#ifdef WITHIN_PANDA
#include "pStatTimer.h"
#endif
////////////////////////////////////////////////////////////////////
// Function: DCField::Constructor
// Access: Public
// Description:
////////////////////////////////////////////////////////////////////
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;
_flags = 0;
_has_default_value = false;
@ -479,7 +515,13 @@ receive_update(DCPacker &packer, PyObject *distobj) const {
PyObject *func = PyObject_GetAttrString(distobj, (char *)_name.c_str());
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_DECREF(func);
Py_DECREF(args);

View File

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

View File

@ -29,7 +29,7 @@
// Description:
////////////////////////////////////////////////////////////////////
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 {
public:
DCMolecularField(const string &name);
DCMolecularField(const string &name, DCClass *dclass);
PUBLISHED:
virtual DCMolecularField *as_molecular_field();

View File

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