Merge branch 'DRTVWR-513-maint' of https://bitbucket.org/lindenlab/viewer
commit
0ba281e843
|
|
@ -2375,18 +2375,18 @@
|
|||
<key>archive</key>
|
||||
<map>
|
||||
<key>hash</key>
|
||||
<string>9f4687d7d328b0c13a9e651e805e880a</string>
|
||||
<string>c541838a933e0714a954e9ef6c89345d</string>
|
||||
<key>hash_algorithm</key>
|
||||
<string>md5</string>
|
||||
<key>url</key>
|
||||
<string>https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/71501/691487/llca-202011010215.551526-common-551526.tar.bz2</string>
|
||||
<string>https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/73387/708088/llca-202012011600.553112-common-553112.tar.bz2</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>common</string>
|
||||
</map>
|
||||
</map>
|
||||
<key>version</key>
|
||||
<string>202011010215.551526</string>
|
||||
<string>202012011600.553112</string>
|
||||
</map>
|
||||
<key>llphysicsextensions_source</key>
|
||||
<map>
|
||||
|
|
|
|||
|
|
@ -171,8 +171,6 @@ LLAvatarAppearance::LLAvatarXmlInfo::~LLAvatarXmlInfo()
|
|||
//-----------------------------------------------------------------------------
|
||||
// Static Data
|
||||
//-----------------------------------------------------------------------------
|
||||
LLXmlTree LLAvatarAppearance::sXMLTree;
|
||||
LLXmlTree LLAvatarAppearance::sSkeletonXMLTree;
|
||||
LLAvatarSkeletonInfo* LLAvatarAppearance::sAvatarSkeletonInfo = NULL;
|
||||
LLAvatarAppearance::LLAvatarXmlInfo* LLAvatarAppearance::sAvatarXmlInfo = NULL;
|
||||
LLAvatarAppearanceDefines::LLAvatarAppearanceDictionary* LLAvatarAppearance::sAvatarDictionary = NULL;
|
||||
|
|
@ -363,14 +361,15 @@ void LLAvatarAppearance::initClass(const std::string& avatar_file_name_arg, cons
|
|||
{
|
||||
avatar_file_name = gDirUtilp->getExpandedFilename(LL_PATH_CHARACTER,AVATAR_DEFAULT_CHAR + "_lad.xml");
|
||||
}
|
||||
BOOL success = sXMLTree.parseFile( avatar_file_name, FALSE );
|
||||
LLXmlTree xml_tree;
|
||||
BOOL success = xml_tree.parseFile( avatar_file_name, FALSE );
|
||||
if (!success)
|
||||
{
|
||||
LL_ERRS() << "Problem reading avatar configuration file:" << avatar_file_name << LL_ENDL;
|
||||
}
|
||||
|
||||
// now sanity check xml file
|
||||
LLXmlTreeNode* root = sXMLTree.getRoot();
|
||||
LLXmlTreeNode* root = xml_tree.getRoot();
|
||||
if (!root)
|
||||
{
|
||||
LL_ERRS() << "No root node found in avatar configuration file: " << avatar_file_name << LL_ENDL;
|
||||
|
|
@ -417,8 +416,9 @@ void LLAvatarAppearance::initClass(const std::string& avatar_file_name_arg, cons
|
|||
}
|
||||
|
||||
std::string skeleton_path;
|
||||
LLXmlTree skeleton_xml_tree;
|
||||
skeleton_path = gDirUtilp->getExpandedFilename(LL_PATH_CHARACTER,skeleton_file_name);
|
||||
if (!parseSkeletonFile(skeleton_path))
|
||||
if (!parseSkeletonFile(skeleton_path, skeleton_xml_tree))
|
||||
{
|
||||
LL_ERRS() << "Error parsing skeleton file: " << skeleton_path << LL_ENDL;
|
||||
}
|
||||
|
|
@ -431,7 +431,7 @@ void LLAvatarAppearance::initClass(const std::string& avatar_file_name_arg, cons
|
|||
delete sAvatarSkeletonInfo;
|
||||
}
|
||||
sAvatarSkeletonInfo = new LLAvatarSkeletonInfo;
|
||||
if (!sAvatarSkeletonInfo->parseXml(sSkeletonXMLTree.getRoot()))
|
||||
if (!sAvatarSkeletonInfo->parseXml(skeleton_xml_tree.getRoot()))
|
||||
{
|
||||
LL_ERRS() << "Error parsing skeleton XML file: " << skeleton_path << LL_ENDL;
|
||||
}
|
||||
|
|
@ -472,8 +472,6 @@ void LLAvatarAppearance::cleanupClass()
|
|||
delete_and_clear(sAvatarXmlInfo);
|
||||
delete_and_clear(sAvatarDictionary);
|
||||
delete_and_clear(sAvatarSkeletonInfo);
|
||||
sSkeletonXMLTree.cleanup();
|
||||
sXMLTree.cleanup();
|
||||
}
|
||||
|
||||
using namespace LLAvatarAppearanceDefines;
|
||||
|
|
@ -606,12 +604,12 @@ F32 LLAvatarAppearance::getAvatarOffset() /*const*/
|
|||
//-----------------------------------------------------------------------------
|
||||
// parseSkeletonFile()
|
||||
//-----------------------------------------------------------------------------
|
||||
BOOL LLAvatarAppearance::parseSkeletonFile(const std::string& filename)
|
||||
BOOL LLAvatarAppearance::parseSkeletonFile(const std::string& filename, LLXmlTree& skeleton_xml_tree)
|
||||
{
|
||||
//-------------------------------------------------------------------------
|
||||
// parse the file
|
||||
//-------------------------------------------------------------------------
|
||||
BOOL parsesuccess = sSkeletonXMLTree.parseFile( filename, FALSE );
|
||||
BOOL parsesuccess = skeleton_xml_tree.parseFile( filename, FALSE );
|
||||
|
||||
if (!parsesuccess)
|
||||
{
|
||||
|
|
@ -620,7 +618,7 @@ BOOL LLAvatarAppearance::parseSkeletonFile(const std::string& filename)
|
|||
}
|
||||
|
||||
// now sanity check xml file
|
||||
LLXmlTreeNode* root = sSkeletonXMLTree.getRoot();
|
||||
LLXmlTreeNode* root = skeleton_xml_tree.getRoot();
|
||||
if (!root)
|
||||
{
|
||||
LL_ERRS() << "No root node found in avatar skeleton file: " << filename << LL_ENDL;
|
||||
|
|
|
|||
|
|
@ -162,7 +162,7 @@ public:
|
|||
|
||||
|
||||
protected:
|
||||
static BOOL parseSkeletonFile(const std::string& filename);
|
||||
static BOOL parseSkeletonFile(const std::string& filename, LLXmlTree& skeleton_xml_tree);
|
||||
virtual void buildCharacter();
|
||||
virtual BOOL loadAvatar();
|
||||
// [RLVa:KB] - Checked: 2013-03-03 (RLVa-1.4.8)
|
||||
|
|
@ -222,9 +222,6 @@ public:
|
|||
// XML parse tree
|
||||
//--------------------------------------------------------------------
|
||||
protected:
|
||||
static LLXmlTree sXMLTree; // avatar config file
|
||||
static LLXmlTree sSkeletonXMLTree; // avatar skeleton file
|
||||
|
||||
static LLAvatarSkeletonInfo* sAvatarSkeletonInfo;
|
||||
static LLAvatarXmlInfo* sAvatarXmlInfo;
|
||||
|
||||
|
|
|
|||
|
|
@ -29,150 +29,6 @@
|
|||
#include "llfolderviewmodel.h"
|
||||
#include "lltrans.h"
|
||||
|
||||
// LLFolderViewModelItemCommon
|
||||
|
||||
LLFolderViewModelItemCommon::LLFolderViewModelItemCommon(LLFolderViewModelInterface& root_view_model)
|
||||
: mSortVersion(-1),
|
||||
mPassedFilter(true),
|
||||
mPassedFolderFilter(true),
|
||||
mStringMatchOffsetFilter(std::string::npos),
|
||||
mStringFilterSize(0),
|
||||
mFolderViewItem(NULL),
|
||||
mLastFilterGeneration(-1),
|
||||
mLastFolderFilterGeneration(-1),
|
||||
mMarkedDirtyGeneration(-1),
|
||||
mMostFilteredDescendantGeneration(-1),
|
||||
mParent(NULL),
|
||||
mRootViewModel(root_view_model)
|
||||
{
|
||||
mChildren.clear(); //???
|
||||
}
|
||||
|
||||
LLFolderViewModelItemCommon::~LLFolderViewModelItemCommon()
|
||||
{
|
||||
// Children don't belong to model, but to LLFolderViewItem, just mark them as having no parent
|
||||
std::for_each(mChildren.begin(), mChildren.end(), [](LLFolderViewModelItem* c) {c->setParent(NULL); });
|
||||
|
||||
// Don't leave dead pointer in parent
|
||||
if (mParent)
|
||||
{
|
||||
mParent->removeChild(this);
|
||||
}
|
||||
}
|
||||
|
||||
void LLFolderViewModelItemCommon::dirtyFilter()
|
||||
{
|
||||
if (mMarkedDirtyGeneration < 0)
|
||||
{
|
||||
mMarkedDirtyGeneration = mLastFilterGeneration;
|
||||
}
|
||||
mLastFilterGeneration = -1;
|
||||
mLastFolderFilterGeneration = -1;
|
||||
|
||||
// bubble up dirty flag all the way to root
|
||||
if (mParent)
|
||||
{
|
||||
mParent->dirtyFilter();
|
||||
}
|
||||
}
|
||||
|
||||
void LLFolderViewModelItemCommon::dirtyDescendantsFilter()
|
||||
{
|
||||
mMostFilteredDescendantGeneration = -1;
|
||||
if (mParent)
|
||||
{
|
||||
mParent->dirtyDescendantsFilter();
|
||||
}
|
||||
}
|
||||
|
||||
//virtual
|
||||
void LLFolderViewModelItemCommon::addChild(LLFolderViewModelItem* child)
|
||||
{
|
||||
mChildren.push_back(child);
|
||||
child->setParent(this);
|
||||
dirtyFilter();
|
||||
requestSort();
|
||||
}
|
||||
|
||||
//virtual
|
||||
void LLFolderViewModelItemCommon::removeChild(LLFolderViewModelItem* child)
|
||||
{
|
||||
mChildren.remove(child);
|
||||
child->setParent(NULL);
|
||||
dirtyDescendantsFilter();
|
||||
dirtyFilter();
|
||||
}
|
||||
|
||||
//virtual
|
||||
void LLFolderViewModelItemCommon::clearChildren()
|
||||
{
|
||||
// As this is cleaning the whole list of children wholesale, we do need to delete the pointed objects
|
||||
// This is different and not equivalent to calling removeChild() on each child
|
||||
std::for_each(mChildren.begin(), mChildren.end(), DeletePointer());
|
||||
mChildren.clear();
|
||||
dirtyDescendantsFilter();
|
||||
dirtyFilter();
|
||||
}
|
||||
|
||||
void LLFolderViewModelItemCommon::setPassedFilter(bool passed, S32 filter_generation, std::string::size_type string_offset /*= std::string::npos*/, std::string::size_type string_size /*= 0*/)
|
||||
{
|
||||
mPassedFilter = passed;
|
||||
mLastFilterGeneration = filter_generation;
|
||||
mStringMatchOffsetFilter = string_offset;
|
||||
mStringFilterSize = string_size;
|
||||
mMarkedDirtyGeneration = -1;
|
||||
}
|
||||
|
||||
void LLFolderViewModelItemCommon::setPassedFolderFilter(bool passed, S32 filter_generation)
|
||||
{
|
||||
mPassedFolderFilter = passed;
|
||||
mLastFolderFilterGeneration = filter_generation;
|
||||
}
|
||||
|
||||
//virtual
|
||||
bool LLFolderViewModelItemCommon::potentiallyVisible()
|
||||
{
|
||||
return passedFilter() // we've passed the filter
|
||||
|| (getLastFilterGeneration() < mRootViewModel.getFilter().getFirstSuccessGeneration()) // or we don't know yet
|
||||
|| descendantsPassedFilter();
|
||||
}
|
||||
|
||||
//virtual
|
||||
bool LLFolderViewModelItemCommon::passedFilter(S32 filter_generation /*= -1*/)
|
||||
{
|
||||
if (filter_generation < 0)
|
||||
{
|
||||
filter_generation = mRootViewModel.getFilter().getFirstSuccessGeneration();
|
||||
}
|
||||
bool passed_folder_filter = mPassedFolderFilter && (mLastFolderFilterGeneration >= filter_generation);
|
||||
bool passed_filter = mPassedFilter && (mLastFilterGeneration >= filter_generation);
|
||||
return passed_folder_filter && (passed_filter || descendantsPassedFilter(filter_generation));
|
||||
}
|
||||
|
||||
//virtual
|
||||
bool LLFolderViewModelItemCommon::descendantsPassedFilter(S32 filter_generation /*= -1*/)
|
||||
{
|
||||
if (filter_generation < 0)
|
||||
{
|
||||
filter_generation = mRootViewModel.getFilter().getFirstSuccessGeneration();
|
||||
}
|
||||
return mMostFilteredDescendantGeneration >= filter_generation;
|
||||
}
|
||||
|
||||
// LLFolderViewModelCommon
|
||||
|
||||
LLFolderViewModelCommon::LLFolderViewModelCommon()
|
||||
: mTargetSortVersion(0),
|
||||
mFolderView(NULL)
|
||||
{}
|
||||
|
||||
//virtual
|
||||
void LLFolderViewModelCommon::requestSortAll()
|
||||
{
|
||||
// sort everything
|
||||
mTargetSortVersion++;
|
||||
}
|
||||
|
||||
bool LLFolderViewModelCommon::needsSort(LLFolderViewModelItem* item)
|
||||
{
|
||||
return item->getSortVersion() < mTargetSortVersion;
|
||||
|
|
|
|||
|
|
@ -38,6 +38,7 @@ enum EInventorySortGroup
|
|||
SG_ITEM
|
||||
};
|
||||
|
||||
class LLFontGL;
|
||||
class LLInventoryModel;
|
||||
class LLMenuGL;
|
||||
class LLUIImage;
|
||||
|
|
@ -240,43 +241,134 @@ protected:
|
|||
class LLFolderViewModelItemCommon : public LLFolderViewModelItem
|
||||
{
|
||||
public:
|
||||
LLFolderViewModelItemCommon(LLFolderViewModelInterface& root_view_model);
|
||||
virtual ~LLFolderViewModelItemCommon() override;
|
||||
LLFolderViewModelItemCommon(LLFolderViewModelInterface& root_view_model)
|
||||
: mSortVersion(-1),
|
||||
mPassedFilter(true),
|
||||
mPassedFolderFilter(true),
|
||||
mStringMatchOffsetFilter(std::string::npos),
|
||||
mStringFilterSize(0),
|
||||
mFolderViewItem(NULL),
|
||||
mLastFilterGeneration(-1),
|
||||
mLastFolderFilterGeneration(-1),
|
||||
mMarkedDirtyGeneration(-1),
|
||||
mMostFilteredDescendantGeneration(-1),
|
||||
mParent(NULL),
|
||||
mRootViewModel(root_view_model)
|
||||
{
|
||||
mChildren.clear();
|
||||
}
|
||||
|
||||
void requestSort() override { mSortVersion = -1; }
|
||||
S32 getSortVersion() override { return mSortVersion; }
|
||||
void setSortVersion(S32 version) override { mSortVersion = version;}
|
||||
void requestSort() { mSortVersion = -1; }
|
||||
S32 getSortVersion() { return mSortVersion; }
|
||||
void setSortVersion(S32 version) { mSortVersion = version;}
|
||||
|
||||
S32 getLastFilterGeneration() const override { return mLastFilterGeneration; }
|
||||
S32 getLastFilterGeneration() const { return mLastFilterGeneration; }
|
||||
S32 getLastFolderFilterGeneration() const { return mLastFolderFilterGeneration; }
|
||||
S32 getMarkedDirtyGeneration() const override { return mMarkedDirtyGeneration; }
|
||||
void dirtyFilter() override;
|
||||
void dirtyDescendantsFilter() override;
|
||||
bool hasFilterStringMatch() override;
|
||||
std::string::size_type getFilterStringOffset() override;
|
||||
std::string::size_type getFilterStringSize() override;
|
||||
S32 getMarkedDirtyGeneration() const { return mMarkedDirtyGeneration; }
|
||||
void dirtyFilter()
|
||||
{
|
||||
if(mMarkedDirtyGeneration < 0)
|
||||
{
|
||||
mMarkedDirtyGeneration = mLastFilterGeneration;
|
||||
}
|
||||
mLastFilterGeneration = -1;
|
||||
mLastFolderFilterGeneration = -1;
|
||||
|
||||
// bubble up dirty flag all the way to root
|
||||
if (mParent)
|
||||
{
|
||||
mParent->dirtyFilter();
|
||||
}
|
||||
}
|
||||
void dirtyDescendantsFilter()
|
||||
{
|
||||
mMostFilteredDescendantGeneration = -1;
|
||||
if (mParent)
|
||||
{
|
||||
mParent->dirtyDescendantsFilter();
|
||||
}
|
||||
}
|
||||
bool hasFilterStringMatch();
|
||||
std::string::size_type getFilterStringOffset();
|
||||
std::string::size_type getFilterStringSize();
|
||||
|
||||
typedef std::list<LLFolderViewModelItem*> child_list_t;
|
||||
|
||||
virtual void addChild(LLFolderViewModelItem* child) override;
|
||||
virtual void removeChild(LLFolderViewModelItem* child) override;
|
||||
virtual void addChild(LLFolderViewModelItem* child)
|
||||
{
|
||||
mChildren.push_back(child);
|
||||
child->setParent(this);
|
||||
dirtyFilter();
|
||||
requestSort();
|
||||
}
|
||||
virtual void removeChild(LLFolderViewModelItem* child)
|
||||
{
|
||||
mChildren.remove(child);
|
||||
child->setParent(NULL);
|
||||
dirtyDescendantsFilter();
|
||||
dirtyFilter();
|
||||
}
|
||||
|
||||
virtual void clearChildren();
|
||||
virtual void clearChildren()
|
||||
{
|
||||
// As this is cleaning the whole list of children wholesale, we do need to delete the pointed objects
|
||||
// This is different and not equivalent to calling removeChild() on each child
|
||||
std::for_each(mChildren.begin(), mChildren.end(), DeletePointer());
|
||||
mChildren.clear();
|
||||
dirtyDescendantsFilter();
|
||||
dirtyFilter();
|
||||
}
|
||||
|
||||
child_list_t::const_iterator getChildrenBegin() const { return mChildren.begin(); }
|
||||
child_list_t::const_iterator getChildrenEnd() const { return mChildren.end(); }
|
||||
child_list_t::size_type getChildrenCount() const { return mChildren.size(); }
|
||||
|
||||
void setPassedFilter(bool passed, S32 filter_generation, std::string::size_type string_offset = std::string::npos, std::string::size_type string_size = 0) override;
|
||||
void setPassedFolderFilter(bool passed, S32 filter_generation) override;
|
||||
virtual bool potentiallyVisible() override;
|
||||
virtual bool passedFilter(S32 filter_generation = -1) override;
|
||||
virtual bool descendantsPassedFilter(S32 filter_generation = -1) override;
|
||||
void setPassedFilter(bool passed, S32 filter_generation, std::string::size_type string_offset = std::string::npos, std::string::size_type string_size = 0)
|
||||
{
|
||||
mPassedFilter = passed;
|
||||
mLastFilterGeneration = filter_generation;
|
||||
mStringMatchOffsetFilter = string_offset;
|
||||
mStringFilterSize = string_size;
|
||||
mMarkedDirtyGeneration = -1;
|
||||
}
|
||||
|
||||
void setPassedFolderFilter(bool passed, S32 filter_generation)
|
||||
{
|
||||
mPassedFolderFilter = passed;
|
||||
mLastFolderFilterGeneration = filter_generation;
|
||||
}
|
||||
|
||||
virtual bool potentiallyVisible()
|
||||
{
|
||||
return passedFilter() // we've passed the filter
|
||||
|| (getLastFilterGeneration() < mRootViewModel.getFilter().getFirstSuccessGeneration()) // or we don't know yet
|
||||
|| descendantsPassedFilter();
|
||||
}
|
||||
|
||||
virtual bool passedFilter(S32 filter_generation = -1)
|
||||
{
|
||||
if (filter_generation < 0)
|
||||
{
|
||||
filter_generation = mRootViewModel.getFilter().getFirstSuccessGeneration();
|
||||
}
|
||||
bool passed_folder_filter = mPassedFolderFilter && (mLastFolderFilterGeneration >= filter_generation);
|
||||
bool passed_filter = mPassedFilter && (mLastFilterGeneration >= filter_generation);
|
||||
return passed_folder_filter && (passed_filter || descendantsPassedFilter(filter_generation));
|
||||
}
|
||||
|
||||
virtual bool descendantsPassedFilter(S32 filter_generation = -1)
|
||||
{
|
||||
if (filter_generation < 0)
|
||||
{
|
||||
filter_generation = mRootViewModel.getFilter().getFirstSuccessGeneration();
|
||||
}
|
||||
return mMostFilteredDescendantGeneration >= filter_generation;
|
||||
}
|
||||
|
||||
|
||||
protected:
|
||||
virtual void setParent(LLFolderViewModelItem* parent) override { mParent = parent; }
|
||||
virtual bool hasParent() override { return mParent != NULL; }
|
||||
virtual void setParent(LLFolderViewModelItem* parent) { mParent = parent; }
|
||||
virtual bool hasParent() { return mParent != NULL; }
|
||||
|
||||
// <FS:ND/>
|
||||
virtual LLFolderViewModelItem* getParent() const { return mParent; }
|
||||
|
|
@ -296,7 +388,7 @@ protected:
|
|||
LLFolderViewModelItem* mParent;
|
||||
LLFolderViewModelInterface& mRootViewModel;
|
||||
|
||||
void setFolderViewItem(LLFolderViewItem* folder_view_item) override { mFolderViewItem = folder_view_item;}
|
||||
void setFolderViewItem(LLFolderViewItem* folder_view_item) { mFolderViewItem = folder_view_item;}
|
||||
LLFolderViewItem* mFolderViewItem;
|
||||
};
|
||||
|
||||
|
|
@ -305,15 +397,20 @@ protected:
|
|||
class LLFolderViewModelCommon : public LLFolderViewModelInterface
|
||||
{
|
||||
public:
|
||||
LLFolderViewModelCommon();
|
||||
LLFolderViewModelCommon()
|
||||
: mTargetSortVersion(0),
|
||||
mFolderView(NULL)
|
||||
{}
|
||||
|
||||
virtual ~LLFolderViewModelCommon() override {}
|
||||
virtual void requestSortAll()
|
||||
{
|
||||
// sort everything
|
||||
mTargetSortVersion++;
|
||||
}
|
||||
virtual std::string getStatusText();
|
||||
virtual void filter();
|
||||
|
||||
virtual void requestSortAll() override;
|
||||
virtual std::string getStatusText() override;
|
||||
virtual void filter() override;
|
||||
|
||||
void setFolderView(LLFolderView* folder_view) override { mFolderView = folder_view;}
|
||||
void setFolderView(LLFolderView* folder_view) { mFolderView = folder_view;}
|
||||
|
||||
protected:
|
||||
bool needsSort(class LLFolderViewModelItem* item);
|
||||
|
|
@ -337,7 +434,7 @@ public:
|
|||
mFilter(filter)
|
||||
{}
|
||||
|
||||
virtual ~LLFolderViewModel() override
|
||||
virtual ~LLFolderViewModel()
|
||||
{
|
||||
delete mSorter;
|
||||
mSorter = NULL;
|
||||
|
|
@ -349,14 +446,14 @@ public:
|
|||
virtual const SortType& getSorter() const { return *mSorter; }
|
||||
virtual void setSorter(const SortType& sorter) { mSorter = new SortType(sorter); requestSortAll(); }
|
||||
|
||||
virtual FilterType& getFilter() override { return *mFilter; }
|
||||
virtual const FilterType& getFilter() const override { return *mFilter; }
|
||||
virtual FilterType& getFilter() { return *mFilter; }
|
||||
virtual const FilterType& getFilter() const { return *mFilter; }
|
||||
virtual void setFilter(const FilterType& filter) { mFilter = new FilterType(filter); }
|
||||
|
||||
// By default, we assume the content is available. If a network fetch mechanism is implemented for the model,
|
||||
// this method needs to be overloaded and return the relevant fetch status.
|
||||
virtual bool contentsReady() override { return true; }
|
||||
virtual bool isFolderComplete(LLFolderViewFolder* folder) override { return true; }
|
||||
virtual bool contentsReady() { return true; }
|
||||
virtual bool isFolderComplete(LLFolderViewFolder* folder) { return true; }
|
||||
|
||||
struct ViewModelCompare
|
||||
{
|
||||
|
|
@ -377,7 +474,7 @@ public:
|
|||
const SortType& mSorter;
|
||||
};
|
||||
|
||||
void sort(LLFolderViewFolder* folder) override
|
||||
void sort(LLFolderViewFolder* folder)
|
||||
{
|
||||
if (needsSort(folder->getViewModelItem()))
|
||||
{
|
||||
|
|
|
|||
|
|
@ -526,8 +526,7 @@ void LLSceneMonitor::fetchQueryResult()
|
|||
|
||||
//dump results to a file _scene_xmonitor_results.csv
|
||||
void LLSceneMonitor::dumpToFile(std::string file_name)
|
||||
{ using namespace LLTrace;
|
||||
|
||||
{
|
||||
if (!hasResults()) return;
|
||||
|
||||
LL_INFOS("SceneMonitor") << "Saving scene load stats to " << file_name << LL_ENDL;
|
||||
|
|
@ -536,7 +535,7 @@ void LLSceneMonitor::dumpToFile(std::string file_name)
|
|||
|
||||
os << std::setprecision(10);
|
||||
|
||||
PeriodicRecording& scene_load_recording = mSceneLoadRecording.getResults();
|
||||
LLTrace::PeriodicRecording& scene_load_recording = mSceneLoadRecording.getResults();
|
||||
const U32 frame_count = scene_load_recording.getNumRecordedPeriods();
|
||||
|
||||
F64Seconds frame_time;
|
||||
|
|
@ -558,7 +557,7 @@ void LLSceneMonitor::dumpToFile(std::string file_name)
|
|||
os << '\n';
|
||||
|
||||
|
||||
typedef StatType<CountAccumulator> trace_count;
|
||||
typedef LLTrace::StatType<LLTrace::CountAccumulator> trace_count;
|
||||
for (auto& it : trace_count::instance_snapshot())
|
||||
{
|
||||
std::ostringstream row;
|
||||
|
|
@ -576,7 +575,7 @@ void LLSceneMonitor::dumpToFile(std::string file_name)
|
|||
|
||||
for (S32 frame = 1; frame <= frame_count; frame++)
|
||||
{
|
||||
Recording& recording = scene_load_recording.getPrevRecording(frame_count - frame);
|
||||
LLTrace::Recording& recording = scene_load_recording.getPrevRecording(frame_count - frame);
|
||||
samples += recording.getSampleCount(it);
|
||||
row << ", " << recording.getSum(it);
|
||||
}
|
||||
|
|
@ -589,7 +588,7 @@ void LLSceneMonitor::dumpToFile(std::string file_name)
|
|||
}
|
||||
}
|
||||
|
||||
typedef StatType<EventAccumulator> trace_event;
|
||||
typedef LLTrace::StatType<LLTrace::EventAccumulator> trace_event;
|
||||
|
||||
for (auto& it : trace_event::instance_snapshot())
|
||||
{
|
||||
|
|
@ -607,7 +606,7 @@ void LLSceneMonitor::dumpToFile(std::string file_name)
|
|||
|
||||
for (S32 frame = 1; frame <= frame_count; frame++)
|
||||
{
|
||||
Recording& recording = scene_load_recording.getPrevRecording(frame_count - frame);
|
||||
LLTrace::Recording& recording = scene_load_recording.getPrevRecording(frame_count - frame);
|
||||
samples += recording.getSampleCount(it);
|
||||
F64 mean = recording.getMean(it);
|
||||
if (llisnan(mean))
|
||||
|
|
@ -628,7 +627,7 @@ void LLSceneMonitor::dumpToFile(std::string file_name)
|
|||
}
|
||||
}
|
||||
|
||||
typedef StatType<SampleAccumulator> trace_sample;
|
||||
typedef LLTrace::StatType<LLTrace::SampleAccumulator> trace_sample;
|
||||
|
||||
for (auto& it : trace_sample::instance_snapshot())
|
||||
{
|
||||
|
|
@ -646,7 +645,7 @@ void LLSceneMonitor::dumpToFile(std::string file_name)
|
|||
|
||||
for (S32 frame = 1; frame <= frame_count; frame++)
|
||||
{
|
||||
Recording& recording = scene_load_recording.getPrevRecording(frame_count - frame);
|
||||
LLTrace::Recording& recording = scene_load_recording.getPrevRecording(frame_count - frame);
|
||||
samples += recording.getSampleCount(it);
|
||||
F64 mean = recording.getMean(it);
|
||||
if (llisnan(mean))
|
||||
|
|
@ -667,7 +666,7 @@ void LLSceneMonitor::dumpToFile(std::string file_name)
|
|||
}
|
||||
}
|
||||
|
||||
typedef StatType<MemAccumulator> trace_mem;
|
||||
typedef LLTrace::StatType<LLTrace::MemAccumulator> trace_mem;
|
||||
for (auto& it : trace_mem::instance_snapshot())
|
||||
{
|
||||
os << it.getName() << "(KiB)";
|
||||
|
|
|
|||
|
|
@ -194,8 +194,6 @@ static F32 sGlobalVolume = 1.0f;
|
|||
static bool sForceUpdate = false;
|
||||
static LLUUID sOnlyAudibleTextureID = LLUUID::null;
|
||||
static F64 sLowestLoadableImplInterest = 0.0f;
|
||||
// <FS:ND/> Unused
|
||||
//static bool sAnyMediaShowing = false;
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////////////////
|
||||
static void add_media_impl(LLViewerMediaImpl* media)
|
||||
|
|
@ -883,10 +881,7 @@ void LLViewerMedia::updateMedia(void *dummy_arg)
|
|||
|
||||
if (!pimpl->getUsedInUI() && pimpl->hasMedia())
|
||||
{
|
||||
// <FS:ND> Need to set the right instance var
|
||||
// sAnyMediaShowing = true;
|
||||
mAnyMediaShowing = true;
|
||||
// </FS:ND>
|
||||
mAnyMediaShowing = true;
|
||||
}
|
||||
|
||||
if (!pimpl->getUsedInUI() && pimpl->hasMedia() && (pimpl->isMediaPlaying() || !pimpl->isMediaTimeBased()))
|
||||
|
|
|
|||
Loading…
Reference in New Issue