From 5972eb8848ecd1033e987706e404abdc79bfa5e6 Mon Sep 17 00:00:00 2001 From: Homer Horwitz Date: Mon, 17 Nov 2008 22:15:02 +0000 Subject: Fix a few small issues with the progressive texture-download: - The initial priority wasn't passed in, so a discardLevel of -1 in the first request automatically cancelled texture-download. - One-packet textures weren't handled, as CurrentPacket starts at 1 and StopPacket == 0 in that case. - Increased MAX_ALLOWED_TEXTURE_REQUESTS to 15; incremental texture downloads will cause more requests. --- .../Agent/TextureDownload/UserTextureDownloadService.cs | 9 ++++----- .../Modules/Agent/TextureSender/TextureSender.cs | 14 ++++++++------ 2 files changed, 12 insertions(+), 11 deletions(-) (limited to 'OpenSim/Region/Environment') diff --git a/OpenSim/Region/Environment/Modules/Agent/TextureDownload/UserTextureDownloadService.cs b/OpenSim/Region/Environment/Modules/Agent/TextureDownload/UserTextureDownloadService.cs index 715dc4b..bcae259 100644 --- a/OpenSim/Region/Environment/Modules/Agent/TextureDownload/UserTextureDownloadService.cs +++ b/OpenSim/Region/Environment/Modules/Agent/TextureDownload/UserTextureDownloadService.cs @@ -57,11 +57,10 @@ namespace OpenSim.Region.Environment.Modules.Agent.TextureDownload /// /// We will allow the client to request the same texture n times before dropping further requests /// - /// This number includes repeated requests for the same texture at different resolutions (which we don't - /// currently handle properly as far as I know). However, this situation should be handled in a more - /// sophisticated way. + /// This number contains repeated requests for the same texture at different resolutions (which + /// are handled since r7368). However, this situation should be handled in a more sophisticated way. /// - private static readonly int MAX_ALLOWED_TEXTURE_REQUESTS = 5; + private static readonly int MAX_ALLOWED_TEXTURE_REQUESTS = 15; /// /// XXX Also going to limit requests for found textures. @@ -150,7 +149,7 @@ namespace OpenSim.Region.Environment.Modules.Agent.TextureDownload m_scene.AddPendingDownloads(1); - TextureSender.TextureSender requestHandler = new TextureSender.TextureSender(m_client, e.DiscardLevel, e.PacketNumber); + TextureSender.TextureSender requestHandler = new TextureSender.TextureSender(m_client, e.DiscardLevel, e.PacketNumber, e.Priority); m_textureSenders.Add(e.RequestedAssetID, requestHandler); m_scene.AssetCache.GetAsset(e.RequestedAssetID, TextureCallback, true); diff --git a/OpenSim/Region/Environment/Modules/Agent/TextureSender/TextureSender.cs b/OpenSim/Region/Environment/Modules/Agent/TextureSender/TextureSender.cs index 265247c..53be7c5 100644 --- a/OpenSim/Region/Environment/Modules/Agent/TextureSender/TextureSender.cs +++ b/OpenSim/Region/Environment/Modules/Agent/TextureSender/TextureSender.cs @@ -146,15 +146,17 @@ namespace OpenSim.Region.Environment.Modules.Agent.TextureSender private bool sendFirstPacket = false; private int initialDiscardLevel = 0; private int initialPacketNum = 0; + private float initialPriority = 0.0f; private ImageDownload download; private IClientAPI RequestUser; - public TextureSender(IClientAPI client, int discardLevel, uint packetNumber) + public TextureSender(IClientAPI client, int discardLevel, uint packetNumber, float priority) { RequestUser = client; initialDiscardLevel = discardLevel; initialPacketNum = (int)packetNumber; + initialPriority = priority; } #region ITextureSender Members @@ -193,7 +195,7 @@ namespace OpenSim.Region.Environment.Modules.Agent.TextureSender // See ITextureSender public bool SendTexturePacket() { - if (!m_cancel && download.CurrentPacket <= download.StopPacket) + if (!m_cancel && (sendFirstPacket || download.CurrentPacket <= download.StopPacket)) { SendPacket(); return false; @@ -224,7 +226,7 @@ namespace OpenSim.Region.Environment.Modules.Agent.TextureSender OpenMetaverse.AssetTexture texture = new OpenMetaverse.AssetTexture(m_asset.FullID, m_asset.Data); if (texture.DecodeLayerBoundaries()) { - download = new ImageDownload(texture, initialDiscardLevel, 0.0f, initialPacketNum); + download = new ImageDownload(texture, initialDiscardLevel, initialPriority, initialPacketNum); ImageLoaded = true; m_sending = true; m_cancel = false; @@ -258,15 +260,15 @@ namespace OpenSim.Region.Environment.Modules.Agent.TextureSender { sendFirstPacket = false; - if (m_asset.Data.Length <= 600) + if (m_asset.Data.Length <= ImageDownload.FIRST_IMAGE_PACKET_SIZE) { RequestUser.SendImageFirstPart(1, m_asset.FullID, (uint)m_asset.Data.Length, m_asset.Data, 2); return; } else { - byte[] firstImageData = new byte[600]; - Buffer.BlockCopy(m_asset.Data, 0, firstImageData, 0, 600); + byte[] firstImageData = new byte[ImageDownload.FIRST_IMAGE_PACKET_SIZE]; + Buffer.BlockCopy(m_asset.Data, 0, firstImageData, 0, ImageDownload.FIRST_IMAGE_PACKET_SIZE); RequestUser.SendImageFirstPart((ushort)download.TexturePacketCount(), m_asset.FullID, (uint)m_asset.Data.Length, firstImageData, 2); } } -- cgit v1.1