mirror of
https://github.com/panda3d/panda3d.git
synced 2025-10-04 10:54:24 -04:00
pstats on individual field updates
This commit is contained in:
parent
caad633fd7
commit
cbf0b4ab88
@ -30,7 +30,7 @@
|
|||||||
// Description:
|
// Description:
|
||||||
////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////
|
||||||
DCAtomicField::
|
DCAtomicField::
|
||||||
DCAtomicField(const string &name) : DCField(name) {
|
DCAtomicField(const string &name, DCClass *dclass) : DCField(name, dclass) {
|
||||||
}
|
}
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////
|
||||||
|
@ -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:
|
||||||
|
@ -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"
|
||||||
|
@ -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);
|
||||||
|
@ -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
|
||||||
|
@ -29,7 +29,7 @@
|
|||||||
// Description:
|
// Description:
|
||||||
////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////
|
||||||
DCMolecularField::
|
DCMolecularField::
|
||||||
DCMolecularField(const string &name) : DCField(name) {
|
DCMolecularField(const string &name, DCClass *dclass) : DCField(name, dclass) {
|
||||||
}
|
}
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////
|
||||||
|
@ -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();
|
||||||
|
@ -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
|
||||||
{
|
{
|
||||||
|
Loading…
x
Reference in New Issue
Block a user