diff options
| author | Andrey Lihatskiy <alihatskiy@productengine.com> | 2024-05-22 20:51:58 +0300 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-05-22 20:51:58 +0300 |
| commit | 6cc7dd09d5e69cf57e6de7fb568a0ad2693f9c9a (patch) | |
| tree | fab23811a5cedc1ebf01479c852ee92ff62b636c /indra/newview/llattachmentsmgr.h | |
| parent | ef8f4819822288e044ea719feb6af7a1f4df4c4e (diff) | |
| parent | 7bb5afc11ee5a6af78302a8d76a9a619e2baaab2 (diff) | |
Merge pull request #1545 from Ansariel/DRTVWR-600-maint-A
Merge main into DRTVWR-600-maint-a
Diffstat (limited to 'indra/newview/llattachmentsmgr.h')
| -rw-r--r-- | indra/newview/llattachmentsmgr.h | 264 |
1 files changed, 132 insertions, 132 deletions
diff --git a/indra/newview/llattachmentsmgr.h b/indra/newview/llattachmentsmgr.h index c6b9f4e215..630b10030d 100644 --- a/indra/newview/llattachmentsmgr.h +++ b/indra/newview/llattachmentsmgr.h @@ -1,132 +1,132 @@ -/** - * @file llattachmentsmgr.h - * @brief Batches up attachment requests and sends them all - * in one message. - * - * $LicenseInfo:firstyear=2004&license=viewerlgpl$ - * Second Life Viewer Source Code - * Copyright (C) 2010, Linden Research, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; - * version 2.1 of the License only. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - * - * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA - * $/LicenseInfo$ - */ - -#ifndef LL_LLATTACHMENTSMGR_H -#define LL_LLATTACHMENTSMGR_H - -#include "llsingleton.h" - -//-------------------------------------------------------------------------------- -// LLAttachmentsMgr -// -// This class manages batching up of requests at two stages of -// attachment rezzing. -// -// First, attachments requested to rez get saved in -// mPendingAttachments and sent as a single -// RezMultipleAttachmentsFromInv request. This batching is needed -// mainly because of weaknessing the UI element->inventory item -// handling, such that we don't always know when we are requesting -// multiple items. Now they just pile up and get swept into a single -// request during the idle loop. -// -// Second, after attachments arrive, we need to generate COF links for -// them. There are both efficiency and UI correctness reasons why it -// is better to request all the COF links at once and run a single -// callback after they all complete. Given the vagaries of the -// attachment system, there is no guarantee that we will get all the -// attachments we ask for, but we frequently do. So in the common case -// that all the desired attachments arrive fairly quickly, we generate -// a single batched request for COF links. If attachments arrive late -// or not at all, we will still issue COF link requests once a timeout -// value has been exceeded. -// -// To handle attachments that never arrive, we forget about requests -// that exceed a timeout value. -//-------------------------------------------------------------------------------- -class LLAttachmentsMgr: public LLSingleton<LLAttachmentsMgr> -{ - LLSINGLETON(LLAttachmentsMgr); - virtual ~LLAttachmentsMgr(); - -public: - // Stores info for attachments that will be requested during idle. - struct AttachmentsInfo - { - LLUUID mItemID; - U8 mAttachmentPt; - bool mAdd; - }; - typedef std::deque<AttachmentsInfo> attachments_vec_t; - - void addAttachmentRequest(const LLUUID& item_id, - const U8 attachment_pt, - const bool add); - void onAttachmentRequested(const LLUUID& item_id); - void requestAttachments(attachments_vec_t& attachment_requests); - static void onIdle(void *); - - void onAttachmentArrived(const LLUUID& inv_item_id); - - void onDetachRequested(const LLUUID& inv_item_id); - void onDetachCompleted(const LLUUID& inv_item_id); - - bool isAttachmentStateComplete() const; - -private: - - class LLItemRequestTimes: public std::map<LLUUID,LLTimer> - { - public: - LLItemRequestTimes(const std::string& op_name, F32 timeout); - void addTime(const LLUUID& inv_item_id); - void removeTime(const LLUUID& inv_item_id); - bool wasRequestedRecently(const LLUUID& item_id) const; - bool getTime(const LLUUID& inv_item_id, LLTimer& timer) const; - - private: - F32 mTimeout; - std::string mOpName; - }; - - void removeAttachmentRequestTime(const LLUUID& inv_item_id); - void onIdle(); - void requestPendingAttachments(); - void linkRecentlyArrivedAttachments(); - void expireOldAttachmentRequests(); - void expireOldDetachRequests(); - void checkInvalidCOFLinks(); - void spamStatusInfo(); - - // Attachments that we are planning to rez but haven't requested from the server yet. - attachments_vec_t mPendingAttachments; - - // Attachments that have been requested from server but have not arrived yet. - LLItemRequestTimes mAttachmentRequests; - - // Attachments that have been requested to detach but have not gone away yet. - LLItemRequestTimes mDetachRequests; - - // Attachments that have arrived but have not been linked in the COF yet. - std::set<LLUUID> mRecentlyArrivedAttachments; - LLTimer mCOFLinkBatchTimer; - - // Attachments that are linked in the COF but may be invalid. - LLItemRequestTimes mQuestionableCOFLinks; -}; - -#endif +/**
+ * @file llattachmentsmgr.h
+ * @brief Batches up attachment requests and sends them all
+ * in one message.
+ *
+ * $LicenseInfo:firstyear=2004&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2010, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
+ * $/LicenseInfo$
+ */
+
+#ifndef LL_LLATTACHMENTSMGR_H
+#define LL_LLATTACHMENTSMGR_H
+
+#include "llsingleton.h"
+
+//--------------------------------------------------------------------------------
+// LLAttachmentsMgr
+//
+// This class manages batching up of requests at two stages of
+// attachment rezzing.
+//
+// First, attachments requested to rez get saved in
+// mPendingAttachments and sent as a single
+// RezMultipleAttachmentsFromInv request. This batching is needed
+// mainly because of weaknessing the UI element->inventory item
+// handling, such that we don't always know when we are requesting
+// multiple items. Now they just pile up and get swept into a single
+// request during the idle loop.
+//
+// Second, after attachments arrive, we need to generate COF links for
+// them. There are both efficiency and UI correctness reasons why it
+// is better to request all the COF links at once and run a single
+// callback after they all complete. Given the vagaries of the
+// attachment system, there is no guarantee that we will get all the
+// attachments we ask for, but we frequently do. So in the common case
+// that all the desired attachments arrive fairly quickly, we generate
+// a single batched request for COF links. If attachments arrive late
+// or not at all, we will still issue COF link requests once a timeout
+// value has been exceeded.
+//
+// To handle attachments that never arrive, we forget about requests
+// that exceed a timeout value.
+//--------------------------------------------------------------------------------
+class LLAttachmentsMgr: public LLSingleton<LLAttachmentsMgr>
+{
+ LLSINGLETON(LLAttachmentsMgr);
+ virtual ~LLAttachmentsMgr();
+
+public:
+ // Stores info for attachments that will be requested during idle.
+ struct AttachmentsInfo
+ {
+ LLUUID mItemID;
+ U8 mAttachmentPt;
+ bool mAdd;
+ };
+ typedef std::deque<AttachmentsInfo> attachments_vec_t;
+
+ void addAttachmentRequest(const LLUUID& item_id,
+ const U8 attachment_pt,
+ const bool add);
+ void onAttachmentRequested(const LLUUID& item_id);
+ void requestAttachments(attachments_vec_t& attachment_requests);
+ static void onIdle(void *);
+
+ void onAttachmentArrived(const LLUUID& inv_item_id);
+
+ void onDetachRequested(const LLUUID& inv_item_id);
+ void onDetachCompleted(const LLUUID& inv_item_id);
+
+ bool isAttachmentStateComplete() const;
+
+private:
+
+ class LLItemRequestTimes: public std::map<LLUUID,LLTimer>
+ {
+ public:
+ LLItemRequestTimes(const std::string& op_name, F32 timeout);
+ void addTime(const LLUUID& inv_item_id);
+ void removeTime(const LLUUID& inv_item_id);
+ bool wasRequestedRecently(const LLUUID& item_id) const;
+ bool getTime(const LLUUID& inv_item_id, LLTimer& timer) const;
+
+ private:
+ F32 mTimeout;
+ std::string mOpName;
+ };
+
+ void removeAttachmentRequestTime(const LLUUID& inv_item_id);
+ void onIdle();
+ void requestPendingAttachments();
+ void linkRecentlyArrivedAttachments();
+ void expireOldAttachmentRequests();
+ void expireOldDetachRequests();
+ void checkInvalidCOFLinks();
+ void spamStatusInfo();
+
+ // Attachments that we are planning to rez but haven't requested from the server yet.
+ attachments_vec_t mPendingAttachments;
+
+ // Attachments that have been requested from server but have not arrived yet.
+ LLItemRequestTimes mAttachmentRequests;
+
+ // Attachments that have been requested to detach but have not gone away yet.
+ LLItemRequestTimes mDetachRequests;
+
+ // Attachments that have arrived but have not been linked in the COF yet.
+ std::set<LLUUID> mRecentlyArrivedAttachments;
+ LLTimer mCOFLinkBatchTimer;
+
+ // Attachments that are linked in the COF but may be invalid.
+ LLItemRequestTimes mQuestionableCOFLinks;
+};
+
+#endif
|
