diff options
| author | Richard Linden <none@none> | 2012-12-18 00:58:26 -0800 | 
|---|---|---|
| committer | Richard Linden <none@none> | 2012-12-18 00:58:26 -0800 | 
| commit | 1f56e57008f5a50c9e75fc0b4512c483ac359a52 (patch) | |
| tree | 6631b12beaf3cf64e093730e9c93df34b883472c /indra/llui | |
| parent | 8c2e3bea71ea15b805a9e2a288744f10d195d803 (diff) | |
SH-3468 WIP add memory tracking base class
created memory tracking trace type
instrumented a few classes with memory tracking
Diffstat (limited to 'indra/llui')
| -rw-r--r-- | indra/llui/lltextbase.cpp | 17 | ||||
| -rw-r--r-- | indra/llui/lltextbase.h | 5 | ||||
| -rw-r--r-- | indra/llui/lluictrl.cpp | 21 | ||||
| -rw-r--r-- | indra/llui/llview.h | 3 | ||||
| -rw-r--r-- | indra/llui/llviewmodel.cpp | 5 | ||||
| -rw-r--r-- | indra/llui/llviewmodel.h | 4 | 
6 files changed, 39 insertions, 16 deletions
| diff --git a/indra/llui/lltextbase.cpp b/indra/llui/lltextbase.cpp index 3815eec447..31d67a9e08 100644 --- a/indra/llui/lltextbase.cpp +++ b/indra/llui/lltextbase.cpp @@ -561,7 +561,7 @@ void LLTextBase::drawText()  		if ( (mSpellCheckStart != start) || (mSpellCheckEnd != end) )  		{  			const LLWString& wstrText = getWText();  -			mMisspellRanges.clear(); +			memDisclaim(mMisspellRanges).clear();  			segment_set_t::const_iterator seg_it = getSegIterContaining(start);  			while (mSegments.end() != seg_it) @@ -632,6 +632,7 @@ void LLTextBase::drawText()  			mSpellCheckStart = start;  			mSpellCheckEnd = end; +			memClaim(mMisspellRanges);  		}  	} @@ -890,10 +891,12 @@ void LLTextBase::createDefaultSegment()  	// ensures that there is always at least one segment  	if (mSegments.empty())  	{ +		memDisclaim(mSegments);  		LLStyleConstSP sp(new LLStyle(getDefaultStyleParams()));  		LLTextSegmentPtr default_segment = new LLNormalTextSegment( sp, 0, getLength() + 1, *this);  		mSegments.insert(default_segment);  		default_segment->linkToDocument(this); +		memClaim(mSegments);  	}  } @@ -904,6 +907,8 @@ void LLTextBase::insertSegment(LLTextSegmentPtr segment_to_insert)  		return;  	} +	memDisclaim(mSegments); +  	segment_set_t::iterator cur_seg_iter = getSegIterContaining(segment_to_insert->getStart());  	S32 reflow_start_index = 0; @@ -976,6 +981,7 @@ void LLTextBase::insertSegment(LLTextSegmentPtr segment_to_insert)  	// layout potentially changed  	needsReflow(reflow_start_index); +	memClaim(mSegments);  }  BOOL LLTextBase::handleMouseDown(S32 x, S32 y, MASK mask) @@ -1271,8 +1277,11 @@ void LLTextBase::replaceWithSuggestion(U32 index)  			removeStringNoUndo(it->first, it->second - it->first);  			// Insert the suggestion in its place +			memDisclaim(mSuggestionList);  			LLWString suggestion = utf8str_to_wstring(mSuggestionList[index]);  			insertStringNoUndo(it->first, utf8str_to_wstring(mSuggestionList[index])); +			memClaim(mSuggestionList); +  			setCursorPos(it->first + (S32)suggestion.length());  			break; @@ -1334,7 +1343,7 @@ bool LLTextBase::isMisspelledWord(U32 pos) const  void LLTextBase::onSpellCheckSettingsChange()  {  	// Recheck the spelling on every change -	mMisspellRanges.clear(); +	memDisclaim(mMisspellRanges).clear();  	mSpellCheckStart = mSpellCheckEnd = -1;  } @@ -1593,7 +1602,7 @@ LLRect LLTextBase::getTextBoundingRect()  void LLTextBase::clearSegments()  { -	mSegments.clear(); +	memDisclaim(mSegments).clear();  	createDefaultSegment();  } @@ -3057,7 +3066,9 @@ void LLNormalTextSegment::setToolTip(const std::string& tooltip)  		llwarns << "LLTextSegment::setToolTip: cannot replace keyword tooltip." << llendl;  		return;  	} +	memDisclaim(mTooltip);  	mTooltip = tooltip; +	memClaim(mTooltip);  }  bool LLNormalTextSegment::getDimensions(S32 first_char, S32 num_chars, S32& width, S32& height) const diff --git a/indra/llui/lltextbase.h b/indra/llui/lltextbase.h index 90b147cee1..966dd93888 100644 --- a/indra/llui/lltextbase.h +++ b/indra/llui/lltextbase.h @@ -50,7 +50,10 @@ class LLUrlMatch;  /// includes a start/end offset from the start of the string, a  /// style to render with, an optional tooltip, etc.  /// -class LLTextSegment : public LLRefCount, public LLMouseHandler +class LLTextSegment  +:	public LLRefCount,  +	public LLMouseHandler, +	public LLTrace::MemTrackable<LLTextSegment>  {  public:  	LLTextSegment(S32 start, S32 end) : mStart(start), mEnd(end){}; diff --git a/indra/llui/lluictrl.cpp b/indra/llui/lluictrl.cpp index b9c843e931..08358484ef 100644 --- a/indra/llui/lluictrl.cpp +++ b/indra/llui/lluictrl.cpp @@ -118,6 +118,7 @@ LLUICtrl::LLUICtrl(const LLUICtrl::Params& p, const LLViewModelPtr& viewmodel)  	mDoubleClickSignal(NULL),  	mTransparencyType(TT_DEFAULT)  { +	memClaim(viewmodel.get());  }  void LLUICtrl::initFromParams(const Params& p) @@ -940,7 +941,7 @@ boost::signals2::connection LLUICtrl::setCommitCallback( boost::function<void (L  }  boost::signals2::connection LLUICtrl::setValidateBeforeCommit( boost::function<bool (const LLSD& data)> cb )  { -	if (!mValidateSignal) mValidateSignal = new enable_signal_t(); +	if (!mValidateSignal) mValidateSignal = memClaim(new enable_signal_t());  	return mValidateSignal->connect(boost::bind(cb, _2));  } @@ -1003,55 +1004,55 @@ boost::signals2::connection LLUICtrl::setValidateCallback(const EnableCallbackPa  boost::signals2::connection LLUICtrl::setCommitCallback( const commit_signal_t::slot_type& cb )   {  -	if (!mCommitSignal) mCommitSignal = new commit_signal_t(); +	if (!mCommitSignal) mCommitSignal = memClaim(new commit_signal_t());  	return mCommitSignal->connect(cb);   }  boost::signals2::connection LLUICtrl::setValidateCallback( const enable_signal_t::slot_type& cb )   {  -	if (!mValidateSignal) mValidateSignal = new enable_signal_t(); +	if (!mValidateSignal) mValidateSignal = memClaim(new enable_signal_t());  	return mValidateSignal->connect(cb);   }  boost::signals2::connection LLUICtrl::setMouseEnterCallback( const commit_signal_t::slot_type& cb )   {  -	if (!mMouseEnterSignal) mMouseEnterSignal = new commit_signal_t(); +	if (!mMouseEnterSignal) mMouseEnterSignal = memClaim(new commit_signal_t());  	return mMouseEnterSignal->connect(cb);   }  boost::signals2::connection LLUICtrl::setMouseLeaveCallback( const commit_signal_t::slot_type& cb )   {  -	if (!mMouseLeaveSignal) mMouseLeaveSignal = new commit_signal_t(); +	if (!mMouseLeaveSignal) mMouseLeaveSignal = memClaim(new commit_signal_t());  	return mMouseLeaveSignal->connect(cb);   }  boost::signals2::connection LLUICtrl::setMouseDownCallback( const mouse_signal_t::slot_type& cb )   {  -	if (!mMouseDownSignal) mMouseDownSignal = new mouse_signal_t(); +	if (!mMouseDownSignal) mMouseDownSignal = memClaim(new mouse_signal_t());  	return mMouseDownSignal->connect(cb);   }  boost::signals2::connection LLUICtrl::setMouseUpCallback( const mouse_signal_t::slot_type& cb )   {  -	if (!mMouseUpSignal) mMouseUpSignal = new mouse_signal_t(); +	if (!mMouseUpSignal) mMouseUpSignal = memClaim(new mouse_signal_t());  	return mMouseUpSignal->connect(cb);   }  boost::signals2::connection LLUICtrl::setRightMouseDownCallback( const mouse_signal_t::slot_type& cb )   {  -	if (!mRightMouseDownSignal) mRightMouseDownSignal = new mouse_signal_t(); +	if (!mRightMouseDownSignal) mRightMouseDownSignal = memClaim(new mouse_signal_t());  	return mRightMouseDownSignal->connect(cb);   }  boost::signals2::connection LLUICtrl::setRightMouseUpCallback( const mouse_signal_t::slot_type& cb )   {  -	if (!mRightMouseUpSignal) mRightMouseUpSignal = new mouse_signal_t(); +	if (!mRightMouseUpSignal) mRightMouseUpSignal = memClaim(new mouse_signal_t());  	return mRightMouseUpSignal->connect(cb);   }  boost::signals2::connection LLUICtrl::setDoubleClickCallback( const mouse_signal_t::slot_type& cb )   {  -	if (!mDoubleClickSignal) mDoubleClickSignal = new mouse_signal_t(); +	if (!mDoubleClickSignal) mDoubleClickSignal = memClaim(new mouse_signal_t());  	return mDoubleClickSignal->connect(cb);   } diff --git a/indra/llui/llview.h b/indra/llui/llview.h index 1c35349510..29ee2125f9 100644 --- a/indra/llui/llview.h +++ b/indra/llui/llview.h @@ -101,7 +101,8 @@ class LLView  :	public LLMouseHandler,			// handles mouse events  	public LLFocusableElement,		// handles keyboard events  	public LLMortician,				// lazy deletion -	public LLHandleProvider<LLView>	// passes out weak references to self +	public LLHandleProvider<LLView>,     // passes out weak references to self +	public LLTrace::MemTrackable<LLView> // track memory usage  {  public:  	struct Follows : public LLInitParam::ChoiceBlock<Follows> diff --git a/indra/llui/llviewmodel.cpp b/indra/llui/llviewmodel.cpp index a9f8acc440..dff0dcb2fd 100644 --- a/indra/llui/llviewmodel.cpp +++ b/indra/llui/llviewmodel.cpp @@ -80,7 +80,10 @@ LLTextViewModel::LLTextViewModel(const LLSD& value)  void LLTextViewModel::setValue(const LLSD& value)  {  	LLViewModel::setValue(value); +	memDisclaim(mDisplay);      mDisplay = utf8str_to_wstring(value.asString()); +	memClaim(mDisplay); +      // mDisplay and mValue agree      mUpdateFromDisplay = false;  } @@ -91,7 +94,9 @@ void LLTextViewModel::setDisplay(const LLWString& value)      // and do the utf8str_to_wstring() to get the corresponding mDisplay      // value. But a text editor might want to edit the display string      // directly, then convert back to UTF8 on commit. +	memDisclaim(mDisplay);      mDisplay = value; +	memClaim(mDisplay);      mDirty = true;      // Don't immediately convert to UTF8 -- do it lazily -- we expect many      // more setDisplay() calls than getValue() calls. Just flag that it needs diff --git a/indra/llui/llviewmodel.h b/indra/llui/llviewmodel.h index ef2e314799..cec0368460 100644 --- a/indra/llui/llviewmodel.h +++ b/indra/llui/llviewmodel.h @@ -60,7 +60,9 @@ typedef LLPointer<LLListViewModel> LLListViewModelPtr;   * LLViewModel data. This way, the LLViewModel is quietly deleted when the   * last referencing widget is destroyed.   */ -class LLViewModel: public LLRefCount +class LLViewModel  +:	public LLRefCount, +	public LLTrace::MemTrackable<LLViewModel>  {  public:      LLViewModel(); | 
