summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Linden <none@none>2012-11-01 19:55:06 -0700
committerRichard Linden <none@none>2012-11-01 19:55:06 -0700
commitbb6bda9eef48f5b08b56af46321b79fe7f1d49d7 (patch)
treea844a4583d9c67a60dafb85472d5d11ed81d6b19
parent74fe126590fba03752d1d8d88dd3bb59c6900026 (diff)
SH-3499 Ensure asset stats output is correct
added support for specifying predicates for xui and llsd serialization
-rw-r--r--indra/llcommon/llinitparam.cpp11
-rw-r--r--indra/llcommon/llinitparam.h2
-rw-r--r--indra/llcommon/llpredicate.h8
-rw-r--r--indra/llcommon/llsdparam.cpp4
-rw-r--r--indra/llcommon/llsdparam.h2
-rw-r--r--indra/llcommon/lltracerecording.cpp12
-rw-r--r--indra/llcommon/lltracerecording.h22
-rw-r--r--indra/llui/llfloater.cpp4
-rw-r--r--indra/llui/llpanel.cpp4
-rw-r--r--indra/llui/lluictrlfactory.h2
-rw-r--r--indra/llui/llxuiparser.cpp4
-rw-r--r--indra/llui/llxuiparser.h2
-rwxr-xr-xindra/newview/tests/llviewerassetstats_test.cpp1
13 files changed, 38 insertions, 40 deletions
diff --git a/indra/llcommon/llinitparam.cpp b/indra/llcommon/llinitparam.cpp
index afeac0a905..53254c3b56 100644
--- a/indra/llcommon/llinitparam.cpp
+++ b/indra/llcommon/llinitparam.cpp
@@ -188,12 +188,9 @@ namespace LLInitParam
bool BaseBlock::serializeBlock(Parser& parser, Parser::name_stack_t& name_stack, const predicate_rule_t predicate_rule, const LLInitParam::BaseBlock* diff_block) const
{
bool serialized = false;
- if (!isProvided())
+ if (!predicate_rule.check(ll_make_predicate(PROVIDED, isProvided())))
{
- if ((predicate_rule && !ll_predicate(PROVIDED)).isTriviallyFalse())
- {
- return false;
- }
+ return false;
}
// named param is one like LLView::Params::follows
// unnamed param is like LLView::Params::rect - implicit
@@ -206,7 +203,7 @@ namespace LLInitParam
param_handle_t param_handle = (*it)->mParamHandle;
const Param* param = getParamFromHandle(param_handle);
ParamDescriptor::serialize_func_t serialize_func = (*it)->mSerializeFunc;
- if (serialize_func && param->anyProvided())
+ if (serialize_func && predicate_rule.check(ll_make_predicate(PROVIDED, param->anyProvided())))
{
const Param* diff_param = diff_block ? diff_block->getParamFromHandle(param_handle) : NULL;
serialized |= serialize_func(*param, parser, name_stack, predicate_rule, diff_param);
@@ -220,7 +217,7 @@ namespace LLInitParam
param_handle_t param_handle = it->second->mParamHandle;
const Param* param = getParamFromHandle(param_handle);
ParamDescriptor::serialize_func_t serialize_func = it->second->mSerializeFunc;
- if (serialize_func && param->anyProvided())
+ if (serialize_func && predicate_rule.check(ll_make_predicate(PROVIDED, param->anyProvided())))
{
// Ensure this param has not already been serialized
// Prevents <rect> from being serialized as its own tag.
diff --git a/indra/llcommon/llinitparam.h b/indra/llcommon/llinitparam.h
index b52ac809e0..c82b1226ee 100644
--- a/indra/llcommon/llinitparam.h
+++ b/indra/llcommon/llinitparam.h
@@ -545,7 +545,7 @@ namespace LLInitParam
}
bool deserializeBlock(Parser& p, Parser::name_stack_range_t name_stack_range, bool new_name);
- bool serializeBlock(Parser& p, Parser::name_stack_t& name_stack, const predicate_rule_t rule = predicate_rule_t(ll_predicate(PROVIDED) && ll_predicate(NON_DEFAULT)), const BaseBlock* diff_block = NULL) const;
+ bool serializeBlock(Parser& p, Parser::name_stack_t& name_stack, const predicate_rule_t rule, const BaseBlock* diff_block = NULL) const;
bool inspectBlock(Parser& p, Parser::name_stack_t name_stack = Parser::name_stack_t(), S32 min_count = 0, S32 max_count = S32_MAX) const;
virtual const BlockDescriptor& mostDerivedBlockDescriptor() const { return selfBlockDescriptor(); }
diff --git a/indra/llcommon/llpredicate.h b/indra/llcommon/llpredicate.h
index a13172da68..3f7abe67f1 100644
--- a/indra/llcommon/llpredicate.h
+++ b/indra/llcommon/llpredicate.h
@@ -42,8 +42,8 @@ namespace LLPredicate
typedef U32 predicate_flag_t;
static const S32 cMaxEnum = 5;
- Value(ENUM e)
- : mPredicateFlags(cPredicateFlagsFromEnum[e])
+ Value(ENUM e, bool predicate_value = true)
+ : mPredicateFlags(predicate_value ? cPredicateFlagsFromEnum[e] : ~cPredicateFlagsFromEnum[e])
{
llassert(0 <= e && e < cMaxEnum);
}
@@ -227,9 +227,9 @@ namespace LLPredicate
}
template<typename ENUM>
-LLPredicate::Value<ENUM> ll_predicate(ENUM e)
+LLPredicate::Value<ENUM> ll_make_predicate(ENUM e, bool predicate_value = true)
{
- return LLPredicate::Value<ENUM>(e);
+ return LLPredicate::Value<ENUM>(e, predicate_value);
}
diff --git a/indra/llcommon/llsdparam.cpp b/indra/llcommon/llsdparam.cpp
index 42ecc9897d..c10e1b1e20 100644
--- a/indra/llcommon/llsdparam.cpp
+++ b/indra/llcommon/llsdparam.cpp
@@ -102,13 +102,13 @@ void LLParamSDParser::readSD(const LLSD& sd, LLInitParam::BaseBlock& block, bool
//readSDValues(sd, block);
}
-void LLParamSDParser::writeSD(LLSD& sd, const LLInitParam::BaseBlock& block)
+void LLParamSDParser::writeSD(LLSD& sd, const LLInitParam::BaseBlock& block, LLInitParam::predicate_rule_t rules)
{
mNameStack.clear();
mWriteRootSD = &sd;
name_stack_t name_stack;
- block.serializeBlock(*this, name_stack);
+ block.serializeBlock(*this, name_stack, rules);
}
/*virtual*/ std::string LLParamSDParser::getCurrentElementName()
diff --git a/indra/llcommon/llsdparam.h b/indra/llcommon/llsdparam.h
index 6ef5debd7b..032e506fd8 100644
--- a/indra/llcommon/llsdparam.h
+++ b/indra/llcommon/llsdparam.h
@@ -50,7 +50,7 @@ typedef LLInitParam::Parser parser_t;
public:
LLParamSDParser();
void readSD(const LLSD& sd, LLInitParam::BaseBlock& block, bool silent = false);
- void writeSD(LLSD& sd, const LLInitParam::BaseBlock& block);
+ void writeSD(LLSD& sd, const LLInitParam::BaseBlock& block, LLInitParam::predicate_rule_t rules = LLInitParam::predicate_rule_t(LLInitParam::PROVIDED) && LLInitParam::NON_DEFAULT);
/*virtual*/ std::string getCurrentElementName();
diff --git a/indra/llcommon/lltracerecording.cpp b/indra/llcommon/lltracerecording.cpp
index a2733fd0e7..a8e1a5eec9 100644
--- a/indra/llcommon/lltracerecording.cpp
+++ b/indra/llcommon/lltracerecording.cpp
@@ -347,7 +347,7 @@ PeriodicRecording& get_frame_recording()
}
-void LLVCRControlsMixinCommon::start()
+void LLStopWatchControlsMixinCommon::start()
{
switch (mPlayState)
{
@@ -365,7 +365,7 @@ void LLVCRControlsMixinCommon::start()
mPlayState = STARTED;
}
-void LLVCRControlsMixinCommon::stop()
+void LLStopWatchControlsMixinCommon::stop()
{
switch (mPlayState)
{
@@ -381,7 +381,7 @@ void LLVCRControlsMixinCommon::stop()
mPlayState = STOPPED;
}
-void LLVCRControlsMixinCommon::pause()
+void LLStopWatchControlsMixinCommon::pause()
{
switch (mPlayState)
{
@@ -396,7 +396,7 @@ void LLVCRControlsMixinCommon::pause()
mPlayState = PAUSED;
}
-void LLVCRControlsMixinCommon::resume()
+void LLStopWatchControlsMixinCommon::resume()
{
switch (mPlayState)
{
@@ -412,7 +412,7 @@ void LLVCRControlsMixinCommon::resume()
mPlayState = STARTED;
}
-void LLVCRControlsMixinCommon::restart()
+void LLStopWatchControlsMixinCommon::restart()
{
switch (mPlayState)
{
@@ -431,7 +431,7 @@ void LLVCRControlsMixinCommon::restart()
mPlayState = STARTED;
}
-void LLVCRControlsMixinCommon::reset()
+void LLStopWatchControlsMixinCommon::reset()
{
handleReset();
}
diff --git a/indra/llcommon/lltracerecording.h b/indra/llcommon/lltracerecording.h
index a11f04b14b..3a786c1357 100644
--- a/indra/llcommon/lltracerecording.h
+++ b/indra/llcommon/lltracerecording.h
@@ -34,10 +34,10 @@
#include "lltimer.h"
#include "lltrace.h"
-class LL_COMMON_API LLVCRControlsMixinCommon
+class LL_COMMON_API LLStopWatchControlsMixinCommon
{
public:
- virtual ~LLVCRControlsMixinCommon() {}
+ virtual ~LLStopWatchControlsMixinCommon() {}
enum EPlayState
{
@@ -59,7 +59,7 @@ public:
EPlayState getPlayState() { return mPlayState; }
protected:
- LLVCRControlsMixinCommon()
+ LLStopWatchControlsMixinCommon()
: mPlayState(STOPPED)
{}
@@ -75,8 +75,8 @@ private:
};
template<typename DERIVED>
-class LLVCRControlsMixin
-: public LLVCRControlsMixinCommon
+class LLStopWatchControlsMixin
+: public LLStopWatchControlsMixinCommon
{
public:
void splitTo(DERIVED& other)
@@ -97,7 +97,7 @@ private:
namespace LLTrace
{
- class LL_COMMON_API Recording : public LLVCRControlsMixin<Recording>
+ class LL_COMMON_API Recording : public LLStopWatchControlsMixin<Recording>
{
public:
Recording();
@@ -190,7 +190,7 @@ namespace LLTrace
LLUnit::Seconds<F64> getDuration() const { return mElapsedSeconds; }
- // implementation for LLVCRControlsMixin
+ // implementation for LLStopWatchControlsMixin
/*virtual*/ void handleStart();
/*virtual*/ void handleStop();
/*virtual*/ void handleReset();
@@ -212,7 +212,7 @@ namespace LLTrace
};
class LL_COMMON_API PeriodicRecording
- : public LLVCRControlsMixin<PeriodicRecording>
+ : public LLStopWatchControlsMixin<PeriodicRecording>
{
public:
PeriodicRecording(S32 num_periods);
@@ -340,7 +340,7 @@ namespace LLTrace
private:
- // implementation for LLVCRControlsMixin
+ // implementation for LLStopWatchControlsMixin
/*virtual*/ void handleStart();
/*virtual*/ void handleStop();
/*virtual*/ void handleReset();
@@ -357,12 +357,12 @@ namespace LLTrace
PeriodicRecording& get_frame_recording();
class ExtendableRecording
- : public LLVCRControlsMixin<ExtendableRecording>
+ : public LLStopWatchControlsMixin<ExtendableRecording>
{
void extend();
private:
- // implementation for LLVCRControlsMixin
+ // implementation for LLStopWatchControlsMixin
/*virtual*/ void handleStart();
/*virtual*/ void handleStop();
/*virtual*/ void handleReset();
diff --git a/indra/llui/llfloater.cpp b/indra/llui/llfloater.cpp
index d14fe441fb..c4a5d1f05e 100644
--- a/indra/llui/llfloater.cpp
+++ b/indra/llui/llfloater.cpp
@@ -3085,7 +3085,7 @@ bool LLFloater::initFloaterXML(LLXMLNodePtr node, LLView *parent, const std::str
parser.readXUI(node, output_params, LLUICtrlFactory::getInstance()->getCurFileName());
setupParamsForExport(output_params, parent);
output_node->setName(node->getName()->mString);
- parser.writeXUI(output_node, output_params, &default_params);
+ parser.writeXUI(output_node, output_params, LLInitParam::predicate_rule_t(LLInitParam::PROVIDED) && LLInitParam::NON_DEFAULT, &default_params);
return TRUE;
}
@@ -3117,7 +3117,7 @@ bool LLFloater::initFloaterXML(LLXMLNodePtr node, LLView *parent, const std::str
setupParamsForExport(output_params, parent);
Params default_params(LLUICtrlFactory::getDefaultParams<LLFloater>());
output_node->setName(node->getName()->mString);
- parser.writeXUI(output_node, output_params, &default_params);
+ parser.writeXUI(output_node, output_params, LLInitParam::predicate_rule_t(LLInitParam::PROVIDED) && LLInitParam::NON_DEFAULT, &default_params);
}
// Default floater position to top-left corner of screen
diff --git a/indra/llui/llpanel.cpp b/indra/llui/llpanel.cpp
index 00318cec6b..f3d6687e40 100644
--- a/indra/llui/llpanel.cpp
+++ b/indra/llui/llpanel.cpp
@@ -520,7 +520,7 @@ BOOL LLPanel::initPanelXML(LLXMLNodePtr node, LLView *parent, LLXMLNodePtr outpu
Params output_params(params);
setupParamsForExport(output_params, parent);
output_node->setName(node->getName()->mString);
- parser.writeXUI(output_node, output_params, &default_params);
+ parser.writeXUI(output_node, output_params, LLInitParam::predicate_rule_t(LLInitParam::PROVIDED) && LLInitParam::NON_DEFAULT, &default_params);
return TRUE;
}
@@ -551,7 +551,7 @@ BOOL LLPanel::initPanelXML(LLXMLNodePtr node, LLView *parent, LLXMLNodePtr outpu
Params output_params(params);
setupParamsForExport(output_params, parent);
output_node->setName(node->getName()->mString);
- parser.writeXUI(output_node, output_params, &default_params);
+ parser.writeXUI(output_node, output_params, LLInitParam::predicate_rule_t(LLInitParam::PROVIDED) && LLInitParam::NON_DEFAULT, &default_params);
}
params.from_xui = true;
diff --git a/indra/llui/lluictrlfactory.h b/indra/llui/lluictrlfactory.h
index 4e54354731..6513f97ca0 100644
--- a/indra/llui/lluictrlfactory.h
+++ b/indra/llui/lluictrlfactory.h
@@ -273,7 +273,7 @@ private:
// Export only the differences between this any default params
typename T::Params default_params(getDefaultParams<T>());
copyName(node, output_node);
- parser.writeXUI(output_node, output_params, &default_params);
+ parser.writeXUI(output_node, output_params, LLInitParam::predicate_rule_t(LLInitParam::PROVIDED) && LLInitParam::NON_DEFAULT, &default_params);
}
// Apply layout transformations, usually munging rect
diff --git a/indra/llui/llxuiparser.cpp b/indra/llui/llxuiparser.cpp
index 95cda92632..6fc32dbf9c 100644
--- a/indra/llui/llxuiparser.cpp
+++ b/indra/llui/llxuiparser.cpp
@@ -861,11 +861,11 @@ bool LLXUIParser::readAttributes(LLXMLNodePtr nodep, LLInitParam::BaseBlock& blo
return any_parsed;
}
-void LLXUIParser::writeXUI(LLXMLNodePtr node, const LLInitParam::BaseBlock &block, const LLInitParam::BaseBlock* diff_block)
+void LLXUIParser::writeXUI(LLXMLNodePtr node, const LLInitParam::BaseBlock &block, LLInitParam::predicate_rule_t rules, const LLInitParam::BaseBlock* diff_block)
{
mWriteRootNode = node;
name_stack_t name_stack = Parser::name_stack_t();
- block.serializeBlock(*this, name_stack, LLPredicate::Rule<LLInitParam::ESerializePredicates>(), diff_block);
+ block.serializeBlock(*this, name_stack, rules, diff_block);
mOutNodes.clear();
}
diff --git a/indra/llui/llxuiparser.h b/indra/llui/llxuiparser.h
index d7cd256967..9b6b2a321b 100644
--- a/indra/llui/llxuiparser.h
+++ b/indra/llui/llxuiparser.h
@@ -109,7 +109,7 @@ public:
/*virtual*/ void parserError(const std::string& message);
void readXUI(LLXMLNodePtr node, LLInitParam::BaseBlock& block, const std::string& filename = LLStringUtil::null, bool silent=false);
- void writeXUI(LLXMLNodePtr node, const LLInitParam::BaseBlock& block, const LLInitParam::BaseBlock* diff_block = NULL);
+ void writeXUI(LLXMLNodePtr node, const LLInitParam::BaseBlock& block, LLInitParam::predicate_rule_t rules = LLInitParam::predicate_rule_t(LLInitParam::PROVIDED) && LLInitParam::NON_DEFAULT, const LLInitParam::BaseBlock* diff_block = NULL);
private:
bool readXUIImpl(LLXMLNodePtr node, LLInitParam::BaseBlock& block);
diff --git a/indra/newview/tests/llviewerassetstats_test.cpp b/indra/newview/tests/llviewerassetstats_test.cpp
index fc5cd781e6..26a76eda2c 100755
--- a/indra/newview/tests/llviewerassetstats_test.cpp
+++ b/indra/newview/tests/llviewerassetstats_test.cpp
@@ -266,6 +266,7 @@ namespace tut
ensure("Global gViewerAssetStats should still be NULL", (NULL == gViewerAssetStats));
LLSD sd_full = it->asLLSD(false);
+ llinfos << ll_pretty_print_sd(sd_full) << llendl;
// Default (NULL) region ID doesn't produce LLSD results so should
// get an empty map back from output