From b42efcfee36640fbded3c4116f8756e941b20d13 Mon Sep 17 00:00:00 2001
From: Dmitry Zaporozhan <dzaporozhan@productengine.com>
Date: Mon, 19 Apr 2010 13:00:12 +0300
Subject: Update for major task EXT-6564 - Fix wearable editing panels. Added
 temporary "edit" button to outfit list to allow QA test new wearable edit
 panels. Was not reviewed.

--HG--
branch : product-engine
---
 indra/newview/llpaneloutfitedit.cpp                      | 16 +++++++---------
 indra/newview/skins/default/xui/en/panel_outfit_edit.xml | 10 ++++++++++
 2 files changed, 17 insertions(+), 9 deletions(-)

(limited to 'indra')

diff --git a/indra/newview/llpaneloutfitedit.cpp b/indra/newview/llpaneloutfitedit.cpp
index d78a448acb..847778f828 100644
--- a/indra/newview/llpaneloutfitedit.cpp
+++ b/indra/newview/llpaneloutfitedit.cpp
@@ -457,20 +457,18 @@ void LLPanelOutfitEdit::onInventorySelectionChange(const std::deque<LLFolderView
 
 void LLPanelOutfitEdit::onOutfitItemSelectionChange(void)
 {	
-	S32 left_offset = -4;
-	S32 top_offset = -10;
 	LLScrollListItem* item = mLookContents->getLastSelectedItem();
 	if (!item)
 		return;
 
-	LLRect rect = item->getRect();
-	LLRect btn_rect(
-					left_offset + rect.mRight - 50,
-					top_offset  + rect.mTop,
-					left_offset + rect.mRight - 30,
-					top_offset  + rect.mBottom);
+	LLRect item_rect;
+	mLookContents->localRectToOtherView(item->getRect(), &item_rect, getChild<LLUICtrl>("outfit_wearables_panel"));
+
+	// TODO button(and item list) should be removed (when new widget is ready)
+	LLRect btn_rect = mEditWearableBtn->getRect();
+	btn_rect.set(item_rect.mRight - btn_rect.getWidth(), item_rect.mTop, item_rect.mRight, item_rect.mBottom);
 	
-	mEditWearableBtn->setRect(btn_rect);
+	mEditWearableBtn->setShape(btn_rect);
 	
 	mEditWearableBtn->setEnabled(TRUE);
 	if (!mEditWearableBtn->getVisible())
diff --git a/indra/newview/skins/default/xui/en/panel_outfit_edit.xml b/indra/newview/skins/default/xui/en/panel_outfit_edit.xml
index 9ece4aead8..6fbb3229ac 100644
--- a/indra/newview/skins/default/xui/en/panel_outfit_edit.xml
+++ b/indra/newview/skins/default/xui/en/panel_outfit_edit.xml
@@ -154,6 +154,16 @@
                  sort_column="look_item_sort"
                  name="look_item_sort" />
             </scroll_list>
+			<!-- TODO remove this button. Added it temporary for QA to be able to test new edit wearable panel (see EXT-6564)-->
+				<button
+				  follows="left|top|right"
+				  height="20"
+				  label="edit"
+				  left="0"
+				  top="0"
+				  layout="topleft"
+				  name="edit_wearable_btn"
+				  width="40" />
 
             <panel
              background_visible="true"
-- 
cgit v1.2.3


From 71c7b2f6d76b29c527d07c01c52127bf4f5b402e Mon Sep 17 00:00:00 2001
From: Igor Borovkov <iborovkov@productengine.com>
Date: Mon, 19 Apr 2010 13:23:24 +0300
Subject: completed EXT-6764 Implement filtering of wearables (combobox
 options: Clothes/Body, Objects, All) on Add to Outfit subpanel

Reviewed by Neal Orman at https://codereview.productengine.com/secondlife/r/221/

--HG--
branch : product-engine
---
 indra/newview/llpaneloutfitedit.cpp                | 18 +++--
 indra/newview/llpaneloutfitedit.h                  |  1 +
 .../skins/default/xui/en/panel_outfit_edit.xml     | 93 ++++++++++++++++++----
 3 files changed, 89 insertions(+), 23 deletions(-)

(limited to 'indra')

diff --git a/indra/newview/llpaneloutfitedit.cpp b/indra/newview/llpaneloutfitedit.cpp
index 847778f828..ba6473839a 100644
--- a/indra/newview/llpaneloutfitedit.cpp
+++ b/indra/newview/llpaneloutfitedit.cpp
@@ -133,10 +133,6 @@ mRemoveFromOutfitBtn(NULL), mLookObserver(NULL)
 		mLookItemTypes.push_back(LLLookItemType());
 	}
 	
-	// TODO: make these strings translatable
-	mLookItemTypes[LIT_ALL] = LLLookItemType("All Items", ALL_ITEMS_MASK);
-	mLookItemTypes[LIT_WEARABLE] = LLLookItemType("Shape & Clothing", WEARABLE_MASK);
-	mLookItemTypes[LIT_ATTACHMENT] = LLLookItemType("Attachments", ATTACHMENT_MASK);
 
 }
 
@@ -159,10 +155,15 @@ LLPanelOutfitEdit::~LLPanelOutfitEdit()
 BOOL LLPanelOutfitEdit::postBuild()
 {
 	// gInventory.isInventoryUsable() no longer needs to be tested per Richard's fix for race conditions between inventory and panels
-		
+
+	mLookItemTypes[LIT_ALL] = LLLookItemType(getString("Filter.All"), ALL_ITEMS_MASK);
+	mLookItemTypes[LIT_WEARABLE] = LLLookItemType(getString("Filter.Clothes/Body"), WEARABLE_MASK);
+	mLookItemTypes[LIT_ATTACHMENT] = LLLookItemType(getString("Filter.Objects"), ATTACHMENT_MASK);
+
 	mCurrentOutfitName = getChild<LLTextBox>("curr_outfit_name"); 
 
 	childSetCommitCallback("add_btn", boost::bind(&LLPanelOutfitEdit::showAddWearablesPanel, this), NULL);
+	childSetCommitCallback("filter_button", boost::bind(&LLPanelOutfitEdit::showWearablesFilter, this), NULL);
 
 	mLookContents = getChild<LLScrollListCtrl>("look_items_list");
 	mLookContents->sortByColumn("look_item_sort", TRUE);
@@ -174,7 +175,7 @@ BOOL LLPanelOutfitEdit::postBuild()
 	mInventoryItemsPanel->setSelectCallback(boost::bind(&LLPanelOutfitEdit::onInventorySelectionChange, this, _1, _2));
 	mInventoryItemsPanel->getRootFolder()->setReshapeCallback(boost::bind(&LLPanelOutfitEdit::onInventorySelectionChange, this, _1, _2));
 	
-	LLComboBox* type_filter = getChild<LLComboBox>("inventory_filter");
+	LLComboBox* type_filter = getChild<LLComboBox>("filter_wearables_combobox");
 	type_filter->setCommitCallback(boost::bind(&LLPanelOutfitEdit::onTypeFilterChanged, this, _1));
 	type_filter->removeall();
 	for (U32 i = 0; i < mLookItemTypes.size(); ++i)
@@ -236,6 +237,11 @@ void LLPanelOutfitEdit::showAddWearablesPanel()
 	childSetVisible("add_wearables_panel", childGetValue("add_btn"));
 }
 
+void LLPanelOutfitEdit::showWearablesFilter()
+{
+	childSetVisible("filter_combobox_panel", childGetValue("filter_button"));
+}
+
 void LLPanelOutfitEdit::saveOutfit(bool as_new)
 {
 	if (!as_new && LLAppearanceMgr::getInstance()->updateBaseOutfit())
diff --git a/indra/newview/llpaneloutfitedit.h b/indra/newview/llpaneloutfitedit.h
index fa92d4c314..69e8016534 100644
--- a/indra/newview/llpaneloutfitedit.h
+++ b/indra/newview/llpaneloutfitedit.h
@@ -87,6 +87,7 @@ public:
 		// only update the location if there is none already available.
 
 	void showAddWearablesPanel();
+	void showWearablesFilter();
 	void saveOutfit(bool as_new = false);
 	void showSaveMenu();
 
diff --git a/indra/newview/skins/default/xui/en/panel_outfit_edit.xml b/indra/newview/skins/default/xui/en/panel_outfit_edit.xml
index 6fbb3229ac..bc37af0319 100644
--- a/indra/newview/skins/default/xui/en/panel_outfit_edit.xml
+++ b/indra/newview/skins/default/xui/en/panel_outfit_edit.xml
@@ -25,6 +25,10 @@
 		(unknown)
 	</panel.string>
 
+    <!-- Wearables filtering strings -->
+    <string name="Filter.All" value="All"/>
+    <string name="Filter.Clothes/Body" value="Clothes/Body"/>
+    <string name="Filter.Objects" value="Objects"/>
 
     <button
      follows="top|left"
@@ -232,29 +236,18 @@
         <layout_panel
          auto_resize="true"
          default_tab_group="3"
-         height="250" 
-         min_height="120"
+         height="210" 
+         min_height="210"
          name="add_wearables_panel"
          width="300"
          tab_group="2"
          user_resize="true"
          visible="false">
 
-            <text
-             follows="top|left|right"
-             font="SansSerifBold"
-             height="13"
-             layout="topleft"
-             left="5"
-             name="status"
-             text_color="LtGray"
-             top="5"
-             value="Add Wearables"
-             use_ellipses="true"
-             width="275" />
-
+            <!-- *NOTE is not used, invisible and disabled -->
             <filter_editor
              background_image="TextField_Search_Off"
+             enabled="false"
              follows="left|top|right"
              font="SansSerif"
              label="Filter"
@@ -264,13 +257,79 @@
              height="20"
              name="look_item_filter"
              text_color="black"
-             text_pad_left="25" />
+             text_pad_left="25"
+             visible="false"/>
+
+            <layout_stack
+             animate="true"
+             follows="all"
+             height="25"
+             width="300"
+             layout="topleft"
+             orientation="horizontal"
+             name="filter_panels"
+             top="0"
+             left="0">
+                <layout_panel
+                 layout="topleft"
+                 follows="left|top|right"
+                 height="25"
+                 label="IM Control Panel"
+                 name="filter_button_panel"
+                 width="150"
+                 auto_resize="true"
+                 user_resize="false">
+                    <text
+                     follows="top|left|right"
+                     font="SansSerifBold"
+                     height="13"
+                     layout="topleft"
+                     left="5"
+                     name="add_to_outfit_label"
+                     text_color="LtGray"
+                     top="3"
+                     value="Add to Outfit:"
+                     use_ellipses="true"
+                     width="270" />
+                    <button
+                     follows="top|right"
+                     height="20"
+                     image_hover_unselected="Toolbar_Middle_Over"
+                     image_overlay=""
+                     image_selected="Toolbar_Middle_Selected"
+                     image_unselected="Toolbar_Middle_Off"
+                     is_toggle="true"
+                     label="O"
+                     layout="topleft"
+                     right="-1"
+                     name="filter_button"
+                     top="3"
+                     width="20" />
+                </layout_panel>
+                <layout_panel
+                 auto_resize="true"
+                 height="25"
+                 min_width="130"
+                 name="filter_combobox_panel"
+                 width="150"
+                 user_resize="false"
+                 visible="false">
+                    <combo_box
+                     follows="top|left|right"
+                     height="20"
+                     layout="topleft"
+                     right="-5"
+                     name="filter_wearables_combobox"
+                     top="0"
+                     width="130"/>
+                </layout_panel>
+            </layout_stack>
 
             <inventory_panel
              allow_multi_select="false"
              border="false"
              follows="left|top|right|bottom"
-             height="176"
+             height="155"
              layout="topleft"
              left="0"
              mouse_opaque="false"
-- 
cgit v1.2.3


From ea6a3e8e7801425faa75fdd8a40b7990a58ee0d4 Mon Sep 17 00:00:00 2001
From: Eugene Mutavchi <emutavchi@productengine.com>
Date: Mon, 19 Apr 2010 13:32:07 +0300
Subject: Updated the reverted fix for critical bug EXT-1655 ([BSI] Always
 flying after pressing "Stand" to stand up from an object), also integrated
 the fix for EXT-6786 ('Stand' button is corrupted if movement control floater
 is opened). Added some clarifying comments. Reviewed by Tofu Linden at
 https://codereview.productengine.com/secondlife/r/253/.

--HG--
branch : product-engine
---
 indra/newview/llagent.cpp         | 12 +++++++-----
 indra/newview/llmoveview.cpp      |  8 +++++++-
 indra/newview/llviewermessage.cpp |  3 +++
 indra/newview/llvoavatar.cpp      |  2 ++
 4 files changed, 19 insertions(+), 6 deletions(-)

(limited to 'indra')

diff --git a/indra/newview/llagent.cpp b/indra/newview/llagent.cpp
index c5d7f6f118..5c54146caa 100644
--- a/indra/newview/llagent.cpp
+++ b/indra/newview/llagent.cpp
@@ -2296,6 +2296,13 @@ void LLAgent::stopAutoPilot(BOOL user_cancel)
 		{
 			resetAxes(mAutoPilotTargetFacing);
 		}
+		// Restore previous flying state before invoking mAutoPilotFinishedCallback to allow
+		// callback function to change the flying state (like in near_sit_down_point()).
+		// If the user cancelled, don't change the fly state
+		if (!user_cancel)
+		{
+			setFlying(mAutoPilotFlyOnStop);
+		}
 		//NB: auto pilot can terminate for a reason other than reaching the destination
 		if (mAutoPilotFinishedCallback)
 		{
@@ -2303,11 +2310,6 @@ void LLAgent::stopAutoPilot(BOOL user_cancel)
 		}
 		mLeaderID = LLUUID::null;
 
-		// If the user cancelled, don't change the fly state
-		if (!user_cancel)
-		{
-			setFlying(mAutoPilotFlyOnStop);
-		}
 		setControlFlags(AGENT_CONTROL_STOP);
 
 		if (user_cancel && !mAutoPilotBehaviorName.empty())
diff --git a/indra/newview/llmoveview.cpp b/indra/newview/llmoveview.cpp
index 1853b511be..70053a7b48 100644
--- a/indra/newview/llmoveview.cpp
+++ b/indra/newview/llmoveview.cpp
@@ -199,7 +199,12 @@ void LLFloaterMove::setFlyingMode(BOOL fly)
 	if (instance)
 	{
 		instance->setFlyingModeImpl(fly);
-		instance->showModeButtons(!fly);
+		LLVOAvatarSelf* avatar_object = gAgent.getAvatarObject();
+		BOOL is_sitting = avatar_object
+			&& (avatar_object->getRegion() != NULL)
+			&& (!avatar_object->isDead())
+			&& avatar_object->isSitting();
+		instance->showModeButtons(!fly && !is_sitting);
 	}
 	if (fly)
 	{
@@ -695,6 +700,7 @@ void LLPanelStandStopFlying::onStandButtonClick()
 	gAgent.setControlFlags(AGENT_CONTROL_STAND_UP);
 
 	setFocus(FALSE); // EXT-482
+	mStandButton->setVisible(FALSE); // force visibility changing to avoid seeing Stand & Move buttons at once.
 }
 
 void LLPanelStandStopFlying::onStopFlyingButtonClick()
diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp
index 3d0dfbed40..fab1d983c2 100644
--- a/indra/newview/llviewermessage.cpp
+++ b/indra/newview/llviewermessage.cpp
@@ -4169,6 +4169,9 @@ void process_avatar_sit_response(LLMessageSystem *mesgsys, void **user_data)
 	}
 	
 	gAgent.setForceMouselook(force_mouselook);
+	// Forcing turning off flying here to prevent flying after pressing "Stand"
+	// to stand up from an object. See EXT-1655.
+	gAgent.setFlying(FALSE);
 
 	LLViewerObject* object = gObjectList.findObject(sitObjectID);
 	if (object)
diff --git a/indra/newview/llvoavatar.cpp b/indra/newview/llvoavatar.cpp
index 981dd14093..86987f4c78 100644
--- a/indra/newview/llvoavatar.cpp
+++ b/indra/newview/llvoavatar.cpp
@@ -5653,6 +5653,8 @@ void LLVOAvatar::sitOnObject(LLViewerObject *sit_object)
 	mDrawable->mXform.setRotation(mDrawable->getWorldRotation() * inv_obj_rot);
 
 	gPipeline.markMoved(mDrawable, TRUE);
+	// Notice that removing sitDown() from here causes avatars sitting on
+	// objects to be not rendered for new arrivals. See EXT-6835 and EXT-1655.
 	sitDown(TRUE);
 	mRoot.getXform()->setParent(&sit_object->mDrawable->mXform); // LLVOAvatar::sitOnObject
 	mRoot.setPosition(getPosition());
-- 
cgit v1.2.3


From 59d296e2008847b944678f6e3b873435e6d5f826 Mon Sep 17 00:00:00 2001
From: Mike Antipov <mantipov@productengine.com>
Date: Mon, 19 Apr 2010 14:12:42 +0300
Subject: Fixed major bug EXT-6682 (Emptying Lost & Found Folder can crash
 Viewer2.0 if recent item was added)

Reason: a pointer to renamed item was not nullified in Folder View when rename control lost focus.

Fix: updated focus lost callback to nullify the pointer to renamed item. Had to made this callback non-static to have access to Folder View's member pointer.

Also made "New..." menu items disabled for Lost & Found folder.

Reviewed by Tofu Linden at https://codereview.productengine.com/secondlife/r/251/

--HG--
branch : product-engine
---
 indra/newview/llfolderview.cpp      | 6 +++---
 indra/newview/llfolderview.h        | 2 +-
 indra/newview/llinventorybridge.cpp | 7 +++++++
 3 files changed, 11 insertions(+), 4 deletions(-)

(limited to 'indra')

diff --git a/indra/newview/llfolderview.cpp b/indra/newview/llfolderview.cpp
index 8d4d6a178a..c492bfcef1 100644
--- a/indra/newview/llfolderview.cpp
+++ b/indra/newview/llfolderview.cpp
@@ -1416,8 +1416,8 @@ void LLFolderView::startRenamingSelectedItem( void )
 		mRenamer->setVisible( TRUE );
 		// set focus will fail unless item is visible
 		mRenamer->setFocus( TRUE );
-		mRenamer->setTopLostCallback(boost::bind(onRenamerLost, _1));
-		mRenamer->setFocusLostCallback(boost::bind(onRenamerLost, _1));
+		mRenamer->setTopLostCallback(boost::bind(&LLFolderView::onRenamerLost, this, _1));
+		mRenamer->setFocusLostCallback(boost::bind(&LLFolderView::onRenamerLost, this, _1));
 		gViewerWindow->addPopup(mRenamer);
 	}
 }
@@ -2386,9 +2386,9 @@ S32	LLFolderView::notify(const LLSD& info)
 /// Local function definitions
 ///----------------------------------------------------------------------------
 
-//static 
 void LLFolderView::onRenamerLost( LLFocusableElement* renamer)
 {
+	mRenameItem = NULL;
 	LLUICtrl* uictrl = dynamic_cast<LLUICtrl*>(renamer);
 	if (uictrl)
 	{
diff --git a/indra/newview/llfolderview.h b/indra/newview/llfolderview.h
index 42390dfd17..874723bb1a 100644
--- a/indra/newview/llfolderview.h
+++ b/indra/newview/llfolderview.h
@@ -279,7 +279,7 @@ protected:
 	LLScrollContainer* mScrollContainer;  // NULL if this is not a child of a scroll container.
 
 	void commitRename( const LLSD& data );
-	static void onRenamerLost( LLFocusableElement* renamer);
+	void onRenamerLost( LLFocusableElement* renamer);
 
 	void finishRenamingItem( void );
 	void closeRenamer( void );
diff --git a/indra/newview/llinventorybridge.cpp b/indra/newview/llinventorybridge.cpp
index 3071ef3b71..b85bf0d518 100644
--- a/indra/newview/llinventorybridge.cpp
+++ b/indra/newview/llinventorybridge.cpp
@@ -2680,6 +2680,13 @@ void LLFolderBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
 	{
 		// This is the lost+found folder.
 		mItems.push_back(std::string("Empty Lost And Found"));
+
+		mDisabledItems.push_back(std::string("New Folder"));
+		mDisabledItems.push_back(std::string("New Script"));
+		mDisabledItems.push_back(std::string("New Note"));
+		mDisabledItems.push_back(std::string("New Gesture"));
+		mDisabledItems.push_back(std::string("New Clothes"));
+		mDisabledItems.push_back(std::string("New Body Parts"));
 	}
 
 	if(trash_id == mUUID)
-- 
cgit v1.2.3


From 7462911bddd9b5e4033d7108ffc1b6716068f489 Mon Sep 17 00:00:00 2001
From: Tofu Linden <tofu.linden@lindenlab.com>
Date: Mon, 19 Apr 2010 12:49:15 +0100
Subject: Change Linux fasttimer implementation back to RDTSC - using a
 reliable syscall was REALLY chewing CPU time.  Sigh.  I didn't realize how
 incredibly often this gets called.  So, back to the assembly. But be more
 careful with CPU clock count on linux, so the fasttimer values are much more
 accurate than they were the last time we were with RDTSC, in absolute terms -
 back in the right order of magnitude anyway.

Also change many instances of Mhz to MHz.
Also some minor comment fixes.
---
 indra/llcommon/llfasttimer.h         | 24 +++++++++++++++---------
 indra/llcommon/llfasttimer_class.cpp |  6 +++---
 indra/llcommon/llprocessor.cpp       | 11 ++++++++++-
 indra/llcommon/llsys.cpp             | 14 +++++++-------
 indra/llcommon/llsys.h               |  4 ++--
 indra/llcommon/lltimer.cpp           |  2 +-
 indra/newview/llappviewer.cpp        |  4 ++--
 indra/newview/llfeaturemanager.cpp   |  4 ++--
 indra/newview/llviewerjoystick.cpp   |  2 +-
 9 files changed, 43 insertions(+), 28 deletions(-)

(limited to 'indra')

diff --git a/indra/llcommon/llfasttimer.h b/indra/llcommon/llfasttimer.h
index 48461df6ae..840d09d970 100644
--- a/indra/llcommon/llfasttimer.h
+++ b/indra/llcommon/llfasttimer.h
@@ -36,6 +36,10 @@
 // pull in the actual class definition
 #include "llfasttimer_class.h"
 
+//
+// Important note: These implementations must be FAST!
+//
+
 #if LL_WINDOWS
 //
 // Windows implementation of CPU clock
@@ -99,15 +103,17 @@ inline U64 LLFastTimer::getCPUClockCount64()
 #endif
 
 
-#if LL_LINUX || LL_SOLARIS
+#if (LL_LINUX || LL_SOLARIS) && !(defined(__i386__) || defined(__amd64__))
 //
-// Linux and Solaris implementation of CPU clock - all architectures.
+// Linux and Solaris implementation of CPU clock - non-x86.
+// This is accurate but SLOW!  Only use out of desperation.
 //
 // Try to use the MONOTONIC clock if available, this is a constant time counter
-// with nanosecond resolution (but not necessarily accuracy) and attempts are made
-// to synchronize this value between cores at kernel start. It should not be affected
-// by CPU frequency. If not available use the REALTIME clock, but this may be affected by
-// NTP adjustments or other user activity affecting the system time.
+// with nanosecond resolution (but not necessarily accuracy) and attempts are
+// made to synchronize this value between cores at kernel start. It should not
+// be affected by CPU frequency. If not available use the REALTIME clock, but
+// this may be affected by NTP adjustments or other user activity affecting
+// the system time.
 inline U64 LLFastTimer::getCPUClockCount64()
 {
 	struct timespec tp;
@@ -124,12 +130,12 @@ inline U32 LLFastTimer::getCPUClockCount32()
 {
 	return (U32)(LLFastTimer::getCPUClockCount64() >> 8);
 }
-#endif // (LL_LINUX || LL_SOLARIS))
+#endif // (LL_LINUX || LL_SOLARIS) && !(defined(__i386__) || defined(__amd64__))
 
 
-#if (LL_DARWIN) && (defined(__i386__) || defined(__amd64__))
+#if (LL_LINUX || LL_SOLARIS || LL_DARWIN) && (defined(__i386__) || defined(__amd64__))
 //
-// Mac x86 implementation of CPU clock
+// Mac+Linux+Solaris FAST x86 implementation of CPU clock
 inline U32 LLFastTimer::getCPUClockCount32()
 {
 	U64 x;
diff --git a/indra/llcommon/llfasttimer_class.cpp b/indra/llcommon/llfasttimer_class.cpp
index 2e5edb1f3b..f39a4e6619 100644
--- a/indra/llcommon/llfasttimer_class.cpp
+++ b/indra/llcommon/llfasttimer_class.cpp
@@ -230,17 +230,17 @@ void LLFastTimer::DeclareTimer::updateCachedPointers()
 }
 
 //static
-#if LL_LINUX || LL_SOLARIS || ( LL_DARWIN && !(defined(__i386__) || defined(__amd64__)) )
+#if (LL_DARWIN || LL_LINUX || LL_SOLARIS) && !(defined(__i386__) || defined(__amd64__))
 U64 LLFastTimer::countsPerSecond() // counts per second for the *32-bit* timer
 {
 	return sClockResolution >> 8;
 }
-#else // windows or x86-mac
+#else // windows or x86-mac or x86-linux or x86-solaris
 U64 LLFastTimer::countsPerSecond() // counts per second for the *32-bit* timer
 {
 	static U64 sCPUClockFrequency = U64(CProcessor().GetCPUFrequency(50));
 
-	// we drop the low-order byte in out timers, so report a lower frequency
+	// we drop the low-order byte in our timers, so report a lower frequency
 	return sCPUClockFrequency >> 8;
 }
 #endif
diff --git a/indra/llcommon/llprocessor.cpp b/indra/llcommon/llprocessor.cpp
index 8a4a4a8f9a..f6ab55a6b5 100644
--- a/indra/llcommon/llprocessor.cpp
+++ b/indra/llcommon/llprocessor.cpp
@@ -60,6 +60,10 @@
 #	include <windows.h>
 #endif
 
+#if LL_LINUX
+#include "llsys.h"
+#endif // LL_LINUX
+
 #if !LL_DARWIN && !LL_SOLARIS
 
 #ifdef PROCESSOR_FREQUENCY_MEASURE_AVAILABLE
@@ -116,6 +120,11 @@ CProcessor::CProcessor()
 ////////////////////////////////////////////////////////////////////////////
 F64 CProcessor::GetCPUFrequency(unsigned int uiMeasureMSecs)
 {
+#if LL_LINUX
+	// use the shinier LLCPUInfo interface
+	return 1000000.0F * gSysCPU.getMHz();
+#endif
+
 #ifndef PROCESSOR_FREQUENCY_MEASURE_AVAILABLE
 	return 0;
 #else
@@ -781,7 +790,7 @@ bool CProcessor::AnalyzeAMDProcessor()
 		case 5:			// Family = 5:  K5 / K6 processor family
 			switch (CPUInfo.uiModel)
 			{
-				case 0:			// Model = 0:  K5 SSA 5 (Pentium Rating *ggg* 75, 90 and 100 Mhz)
+				case 0:			// Model = 0:  K5 SSA 5 (Pentium Rating *ggg* 75, 90 and 100 MHz)
 					strcpy(CPUInfo.strModel, "AMD K5 SSA5 (PR75, PR90, PR100)");		/* Flawfinder: ignore */
 					strncat(strCPUName, "AMD K5 SSA5 (PR75, PR90, PR100)", sizeof(strCPUName) - strlen(strCPUName) -1);		/* Flawfinder: ignore */
 					break;
diff --git a/indra/llcommon/llsys.cpp b/indra/llcommon/llsys.cpp
index 0272c55db2..52b1b63209 100644
--- a/indra/llcommon/llsys.cpp
+++ b/indra/llcommon/llsys.cpp
@@ -519,15 +519,15 @@ LLCPUInfo::LLCPUInfo()
 	mHasSSE = info->_Ext.SSE_StreamingSIMD_Extensions;
 	mHasSSE2 = info->_Ext.SSE2_StreamingSIMD2_Extensions;
 	mHasAltivec = info->_Ext.Altivec_Extensions;
-	mCPUMhz = (S32)(proc.GetCPUFrequency(50)/1000000.0);
+	mCPUMHz = (F64)(proc.GetCPUFrequency(50)/1000000.0F);
 	mFamily.assign( info->strFamily );
 	mCPUString = "Unknown";
 
 #if LL_WINDOWS || LL_DARWIN || LL_SOLARIS
 	out << proc.strCPUName;
-	if (200 < mCPUMhz && mCPUMhz < 10000)           // *NOTE: cpu speed is often way wrong, do a sanity check
+	if (200 < mCPUMHz && mCPUMHz < 10000)           // *NOTE: cpu speed is often way wrong, do a sanity check
 	{
-		out << " (" << mCPUMhz << " MHz)";
+		out << " (" << mCPUMHz << " MHz)";
 	}
 	mCPUString = out.str();
 	
@@ -572,7 +572,7 @@ LLCPUInfo::LLCPUInfo()
 	if (LLStringUtil::convertToF64(cpuinfo["cpu mhz"], mhz)
 	    && 200.0 < mhz && mhz < 10000.0)
 	{
-		mCPUMhz = (S32)llrint(mhz);
+		mCPUMHz = (F64)(mhz);
 	}
 	if (!cpuinfo["model name"].empty())
 		mCPUString = cpuinfo["model name"];
@@ -595,9 +595,9 @@ bool LLCPUInfo::hasSSE2() const
 	return mHasSSE2;
 }
 
-S32 LLCPUInfo::getMhz() const
+F64 LLCPUInfo::getMHz() const
 {
-	return mCPUMhz;
+	return mCPUMHz;
 }
 
 std::string LLCPUInfo::getCPUString() const
@@ -644,7 +644,7 @@ void LLCPUInfo::stream(std::ostream& s) const
 	s << "->mHasSSE:     " << (U32)mHasSSE << std::endl;
 	s << "->mHasSSE2:    " << (U32)mHasSSE2 << std::endl;
 	s << "->mHasAltivec: " << (U32)mHasAltivec << std::endl;
-	s << "->mCPUMhz:     " << mCPUMhz << std::endl;
+	s << "->mCPUMHz:     " << mCPUMHz << std::endl;
 	s << "->mCPUString:  " << mCPUString << std::endl;
 }
 
diff --git a/indra/llcommon/llsys.h b/indra/llcommon/llsys.h
index c2c45bec9a..0b34951149 100644
--- a/indra/llcommon/llsys.h
+++ b/indra/llcommon/llsys.h
@@ -81,7 +81,7 @@ public:
 	bool hasAltivec() const;
 	bool hasSSE() const;
 	bool hasSSE2() const;
-	S32	 getMhz() const;
+	F64 getMHz() const;
 
 	// Family is "AMD Duron" or "Intel Pentium Pro"
 	const std::string& getFamily() const { return mFamily; }
@@ -90,7 +90,7 @@ private:
 	bool mHasSSE;
 	bool mHasSSE2;
 	bool mHasAltivec;
-	S32 mCPUMhz;
+	F64 mCPUMHz;
 	std::string mFamily;
 	std::string mCPUString;
 };
diff --git a/indra/llcommon/lltimer.cpp b/indra/llcommon/lltimer.cpp
index 25b768079b..6111db2bfa 100644
--- a/indra/llcommon/lltimer.cpp
+++ b/indra/llcommon/lltimer.cpp
@@ -209,7 +209,7 @@ F64 calc_clock_frequency(U32 uiMeasureMSecs)
 // Both Linux and Mac use gettimeofday for accurate time
 F64 calc_clock_frequency(unsigned int uiMeasureMSecs)
 {
-	return 1000000.0; // microseconds, so 1 Mhz.
+	return 1000000.0; // microseconds, so 1 MHz.
 }
 
 U64 get_clock_count()
diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp
index 78163adf47..319d9b02a9 100644
--- a/indra/newview/llappviewer.cpp
+++ b/indra/newview/llappviewer.cpp
@@ -862,7 +862,7 @@ bool LLAppViewer::init()
 			minSpecs += "\n";
 			unsupported = true;
 		}
-		if(gSysCPU.getMhz() < minCPU)
+		if(gSysCPU.getMHz() < minCPU)
 		{
 			minSpecs += LLNotifications::instance().getGlobalString("UnsupportedCPU");
 			minSpecs += "\n";
@@ -2524,7 +2524,7 @@ void LLAppViewer::writeSystemInfo()
 
 	gDebugInfo["CPUInfo"]["CPUString"] = gSysCPU.getCPUString();
 	gDebugInfo["CPUInfo"]["CPUFamily"] = gSysCPU.getFamily();
-	gDebugInfo["CPUInfo"]["CPUMhz"] = gSysCPU.getMhz();
+	gDebugInfo["CPUInfo"]["CPUMhz"] = (S32)gSysCPU.getMHz();
 	gDebugInfo["CPUInfo"]["CPUAltivec"] = gSysCPU.hasAltivec();
 	gDebugInfo["CPUInfo"]["CPUSSE"] = gSysCPU.hasSSE();
 	gDebugInfo["CPUInfo"]["CPUSSE2"] = gSysCPU.hasSSE2();
diff --git a/indra/newview/llfeaturemanager.cpp b/indra/newview/llfeaturemanager.cpp
index fbb90c69f3..50b08f782a 100644
--- a/indra/newview/llfeaturemanager.cpp
+++ b/indra/newview/llfeaturemanager.cpp
@@ -621,9 +621,9 @@ void LLFeatureManager::applyBaseMasks()
 	
 #if LL_SOLARIS && defined(__sparc) 	//  even low MHz SPARCs are fast
 #error The 800 is hinky. Would something like a LL_MIN_MHZ make more sense here?
-	if (gSysCPU.getMhz() < 800)
+	if (gSysCPU.getMHz() < 800)
 #else
-	if (gSysCPU.getMhz() < 1100)
+	if (gSysCPU.getMHz() < 1100)
 #endif
 	{
 		maskFeatures("CPUSlow");
diff --git a/indra/newview/llviewerjoystick.cpp b/indra/newview/llviewerjoystick.cpp
index b758f6c701..240a539f2e 100644
--- a/indra/newview/llviewerjoystick.cpp
+++ b/indra/newview/llviewerjoystick.cpp
@@ -163,7 +163,7 @@ LLViewerJoystick::LLViewerJoystick()
 	memset(mBtn, 0, sizeof(mBtn));
 
 	// factor in bandwidth? bandwidth = gViewerStats->mKBitStat
-	mPerfScale = 4000.f / gSysCPU.getMhz();
+	mPerfScale = 4000.f / gSysCPU.getMHz(); // hmm.  why?
 }
 
 // -----------------------------------------------------------------------------
-- 
cgit v1.2.3


From 80ebd31ac474dfc1c9521b994b6abffe66a1562c Mon Sep 17 00:00:00 2001
From: Tofu Linden <tofu.linden@lindenlab.com>
Date: Mon, 19 Apr 2010 13:08:33 +0100
Subject: trivial comment fix.

---
 indra/newview/llappviewer.cpp | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

(limited to 'indra')

diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp
index 319d9b02a9..532391e590 100644
--- a/indra/newview/llappviewer.cpp
+++ b/indra/newview/llappviewer.cpp
@@ -2537,7 +2537,7 @@ void LLAppViewer::writeSystemInfo()
 	// which may have been the intended grid. This can b
 	gDebugInfo["GridName"] = LLViewerLogin::getInstance()->getGridLabel();
 
-	// *FIX:Mani - move this ddown in llappviewerwin32
+	// *FIX:Mani - move this down in llappviewerwin32
 #ifdef LL_WINDOWS
 	DWORD thread_id = GetCurrentThreadId();
 	gDebugInfo["MainloopThreadID"] = (S32)thread_id;
-- 
cgit v1.2.3