mirror of
https://github.com/panda3d/panda3d.git
synced 2025-10-03 10:22:45 -04:00
pstats on individual field updates
This commit is contained in:
parent
caad633fd7
commit
cbf0b4ab88
@ -30,7 +30,7 @@
|
||||
// Description:
|
||||
////////////////////////////////////////////////////////////////////
|
||||
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 {
|
||||
public:
|
||||
DCAtomicField(const string &name);
|
||||
DCAtomicField(const string &name, DCClass *dclass);
|
||||
virtual ~DCAtomicField();
|
||||
|
||||
PUBLISHED:
|
||||
|
@ -134,6 +134,8 @@ private:
|
||||
#ifdef HAVE_PYTHON
|
||||
PyObject *_class_def;
|
||||
#endif
|
||||
|
||||
friend class DCField;
|
||||
};
|
||||
|
||||
#include "dcClass.I"
|
||||
|
@ -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);
|
||||
|
@ -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
|
||||
|
@ -29,7 +29,7 @@
|
||||
// Description:
|
||||
////////////////////////////////////////////////////////////////////
|
||||
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 {
|
||||
public:
|
||||
DCMolecularField(const string &name);
|
||||
DCMolecularField(const string &name, DCClass *dclass);
|
||||
|
||||
PUBLISHED:
|
||||
virtual DCMolecularField *as_molecular_field();
|
||||
|
@ -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
|
||||
{
|
||||
|
Loading…
x
Reference in New Issue
Block a user