public PackageInformation CreatePackageInformation(string packageName, int pid, IAndroidLogcatDevice device)
        {
            if (pid <= 0)
            {
                return(null);
            }

            var packages            = GetOrCreatePackagesForDevice(device);
            PackageInformation info = packages.FirstOrDefault(package => package.processId == pid);

            if (info != null)
            {
                return(info);
            }

            var newPackage = new PackageInformation()
            {
                name      = packageName,
                processId = pid,
                deviceId  = device.Id
            };

            packages.Add(newPackage);
            RefreshPackagesForSerialization();
            return(newPackage);
        }
        internal void QueueMemoryRequest(IAndroidLogcatDevice device, PackageInformation package)
        {
            m_ExpectedDevice             = device;
            m_ExpectedPackageFromRequest = package;
            if (m_ExpectedPackageFromRequest == null || !m_ExpectedPackageFromRequest.IsAlive() || m_ExpectedDevice == null)
            {
                return;
            }
            // Don't make a memory request, if previous requests haven't finished yet
            // Otherwise async queue will grow bigger and bigger
            const int kMaxRequestsInQueue = 3;

            if (m_RequestsInQueue > kMaxRequestsInQueue)
            {
                return;
            }
            m_RequestsInQueue++;
            m_Runtime.Dispatcher.Schedule(
                new AndroidLogcatQueryMemoryInput()
            {
                adb = ADB.GetInstance(),
                packageProcessId = m_ExpectedPackageFromRequest.processId,
                packageName      = m_ExpectedPackageFromRequest.name,
                deviceId         = device.Id
            },
                QueryMemoryAsync,
                IntegrateQueryMemory,
                false);
        }
        private PackageInformation CreatePackageInformation(string packageName, int pid, string deviceId)
        {
            if (pid <= 0)
            {
                return(null);
            }

            var packages            = GetPackagesForDevice(deviceId);
            PackageInformation info = packages.FirstOrDefault(package => package.processId == pid);

            if (info != null)
            {
                return(info);
            }

            var newPackage = new PackageInformation()
            {
                name        = packageName,
                displayName = packageName + " (" + pid + ")",
                processId   = pid,
                deviceId    = deviceId
            };

            packages.Add(newPackage);
            return(newPackage);
        }
        private void Update()
        {
            if (m_DeviceIds != null && m_DeviceIds.Count == 0)
                UpdateConnectedDevicesList(false);

            if (m_DeviceIds.Count == 0)
                return;

            if (m_AutoSelectPackage && !m_FinishedAutoselectingPackage)
            {
                // This is for AutoRun triggered by "Build And Run".
                if ((DateTime.Now - m_TimeOfLastAutoConnectUpdate).TotalMilliseconds < kMillisecondsBetweenConsecutiveAutoConnectChecks)
                    return;
                AndroidLogcatInternalLog.Log("Waiting for {0} launch, elapsed {1} seconds", PlayerSettings.applicationIdentifier, (DateTime.Now - m_TimeOfLastAutoConnectStart).Seconds);
                m_TimeOfLastAutoConnectUpdate = DateTime.Now;

                ResetPackages(m_DeviceIds[0]);

                int projectApplicationPid = GetPidFromPackageName(PlayerSettings.applicationIdentifier, m_DeviceIds[0]);
                var package = CreatePackageInformation(PlayerSettings.applicationIdentifier, projectApplicationPid, m_DeviceIds[0]);
                if (package != null)
                {
                    AndroidLogcatInternalLog.Log("Auto selecting package {0}", PlayerSettings.applicationIdentifier);
                    // Note: Don't call SelectPackage as that will reset m_AutoselectPackage
                    m_SelectedPackage = package;
                    m_SelectedDeviceIndex = 0;
                    m_SelectedDeviceId = m_DeviceIds[m_SelectedDeviceIndex];

                    RestartLogCat();
                    m_FinishedAutoselectingPackage = true;
                    UpdateStatusBar();
                }
                else
                {
                    var timeoutMS = (DateTime.Now - m_TimeOfLastAutoConnectStart).TotalMilliseconds;
                    if (timeoutMS > kMillisecondsMaxAutoconnectTimeOut)
                    {
                        var msg = string.Format("Timeout {0} ms while waiting for '{1}' to launch.", timeoutMS, PlayerSettings.applicationIdentifier);
                        UpdateStatusBar(msg);
                        AndroidLogcatInternalLog.Log(msg);
                        m_FinishedAutoselectingPackage = true;
                    }
                }
            }
            else
            {
                if (m_SelectedDeviceId == null)
                {
                    int selectedDeviceIndex;
                    PackageInformation selectedPackage;
                    GetSelectedDeviceIndex(out selectedDeviceIndex, out selectedPackage);
                    SetSelectedDeviceByIndex(selectedDeviceIndex, true);
                    SelectPackage(selectedPackage);
                }
            }
        }
        internal void ClearEntries()
        {
            m_SelectedEntry = -1;
            m_EntryCount    = 0;
            m_CurrentEntry  = 0;

            m_UpperMemoryBoundry         = 32 * 1000 * 1000;
            m_ExpectedPackageFromRequest = null;
            m_ExpectedDevice             = null;
        }
 private void ResetPackages(string deviceId)
 {
     m_SelectedPackage = null;
     List<PackageInformation> packages;
     if (!m_PackagesForAllDevices.TryGetValue(deviceId, out packages))
     {
         packages = new List<PackageInformation>();
         m_PackagesForAllDevices.Add(deviceId, packages);
     }
 }
        private void SelectPackage(PackageInformation newPackage)
        {
            if ((m_SelectedPackage == null && newPackage == null) ||
                (newPackage != null && m_SelectedPackage != null && newPackage.name == m_SelectedPackage.name && newPackage.processId == m_SelectedPackage.processId))
                return;

            m_AutoSelectPackage = false;
            m_SelectedPackage = newPackage;

            RestartLogCat();

            AndroidLogcatInternalLog.Log("Selecting pacakge {0}", newPackage == null ? "<null>" : newPackage.displayName);
        }
        private void GetSelectedDeviceIndex(out int selectedDeviceIndex, out PackageInformation selectedPackage)
        {
            if (m_JsonSerialization == null || string.IsNullOrEmpty(m_JsonSerialization.m_SelectedDeviceId) || m_DeviceIds.IndexOf(m_JsonSerialization.m_SelectedDeviceId) < 0)
            {
                selectedDeviceIndex = 0;
                selectedPackage     = null;
                m_JsonSerialization = null;
                return;
            }

            selectedDeviceIndex = m_DeviceIds.IndexOf(m_JsonSerialization.m_SelectedDeviceId);
            selectedPackage     = m_JsonSerialization.m_SelectedPackage;

            // We should only restore from AndroidLogcatJsonSerialization once during first launching.
            m_JsonSerialization = null;
        }
 internal void SetExpectedDeviceAndPackage(IAndroidLogcatDevice device, PackageInformation package)
 {
     m_ExpectedDevice             = device;
     m_ExpectedPackageFromRequest = package;
 }
 private void SetPacakge(PackageInformation newPackage)
 {
     SelectedPackage = newPackage;
     m_MemoryViewer.ClearEntries();
     m_MemoryViewer.SetExpectedDeviceAndPackage(m_Runtime.DeviceQuery.SelectedDevice, SelectedPackage);
 }
        private void GetDeviceAndPackageFromSavedState(out IAndroidLogcatDevice savedDevice, out PackageInformation savedPackage)
        {
            savedDevice  = null;
            savedPackage = null;

            var settings = m_Runtime.UserSettings;

            if (!settings.LastSelectedDeviceIdValid)
            {
                return;
            }

            var savedDeviceId = settings.LastSelectedDeviceId;

            savedDevice  = m_Runtime.DeviceQuery.GetDevice(savedDeviceId);
            savedPackage = settings.LastSelectedPackage;
        }