Uploaded image for project: 'JDK'
  1. JDK
  2. JDK-6788497

D3D: stability issues in low video memory situations

XMLWordPrintable

    • Icon: Bug Bug
    • Resolution: Unresolved
    • Icon: P3 P3
    • None
    • 6u10, 6u12, 6u14
    • client-libs
    • 2d
    • x86
    • windows_xp

      FULL PRODUCT VERSION :
      java version "1.6.0_11"
      Java(TM) SE Runtime Environment (build 1.6.0_11-b03)
      Java HotSpot(TM) Client VM (build 11.0-b16, mixed mode, sharing)

      ADDITIONAL OS VERSION INFORMATION :
      Microsoft Windows XP [Version 5.1.2600]

      EXTRA RELEVANT SYSTEM CONFIGURATION :
      System:
        Microsoft Windows XP
        Professional
        Version 2002
        Service Pack 3

      Computer:
        Intel (R)
        Pentium(R) 4 CPU 2.60GHz
        2.61 GHz, 1.00 GB of RAM


      Video display driver details:
        nv4_mini.sys
        Provider: NVIDIA Corporation
        File Version: 6.14.10.5673
        Copyright: (C) NVIDIA Corporation
        Digital Signer: Microsoft Windows Publisher

        nv4_disp.dll
        Provider: NVIDIA Corporation
        File Version: 6.14.10.5673
        Copyright: (C) NVIDIA Corporation
        Digital Signer: Microsoft Windows Component Publisher


      Video display settings:

      Display:
      NOKIA 447Xpro on NVIDIA GeForce FX 5600 (Microsoft Corporation)

      Screen resolution: 1280 by 1024 pixels
      Color quality: Highest (32 bit)

      96 DPI

      Adapter info:
        Chip Type: GeForce FX 5600
        DAC Type: Integrated RAMDAC
        Memory Size: 256 MB
        Adapter String: GeForce FX 5600
        Bios Information: Version 4.31.20.40.00

      Monitor Type: NOKIA 447Xpro
      Screen refresh rate: 85 Hertz

      Hardware acceleration: Full
      Selected box: "Enable write combining"

      ***************************************************
      Note: I closed out all the "behind the scenes" programs running from the task bar except for
      ZoneAlarm (I have it configured so that Anti-virus is off but Anti-spyware is activated) and
      that combined with the video problem caused Windows XP to completely crash with NO BSOD. Here
      is the version info for ZoneAlarm:

      ZONEALARM Internet Security Suite

      Version Information:
        ZoneAlarm Security Suite version 8.0.059.000
        TrueVectory security engine version 8.0.059.000
        Driver version 8.0.059.000
        Anti-virus engine version 6.02.678, DAT file version 958836962
        Anti-spyware engine version 5.0.202.0, DAT file version 01.200812.5005
        AntiSpam version 5.0.61.9957

      When testing with many services stopped (e.g., Diskeeper and ZoneAlarm) after a somewhat long delay
      where the mouse became a double error, Windows switched the video to the lowest possible resolution
      (probably with their own failsafe driver) and came up with a dialog which started with:
      "nv4_disp display driver has stopped working normally. blah. blah. blah" I was also told that
      after Windows restarted I would be provided with the option of submitting the bug report to Microsoft
      which I was. After using their little error reporting wizard it brought up the browser with the following
      URL:

      http://wer.microsoft.com/responses/Response.aspx/11/en-us/5.1.2600.0.00000000.9.9?SGD=a4228869-653f-4926-a7ea-e367e25f4f91



      A DESCRIPTION OF THE PROBLEM :
      After building the attached source code and making sure that synthetica.jar and syntheticaSimple2D.jar are in the class path, select "Open Test Panel" from the "File" menu. Once the "Test Panel Resize Crash..." dialog appears, simply take your mouse on the right side of the panel and hold it down and try to resize to the left as small as possible and hold down for a few seconds and with ZoneAlarm in the background (see notes above under "Additional Configuration Information") the system completely crashed to the BIOS and automatically restarted. With all the background programs including ZoneAlarm, the mouse became a double arrow and then paused for about 30 seconds after which Windows switched to its safe low resolution mode and brought up dialog about a problem in the video driver: nv4_disp display driver has stopped working normally. etc., etc.,

      synthetica.jar can be downloaded from:
         http://www.javasoft.de/jsf/secured/products/synthetica/download

      syntheticaSimple2D.jar can be downloaded from:
         http://www.javasoft.de/jsf/public/products/synthetica/themes

      You must register first but anyone can for free!



      STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
      Please see above under "Description"

      EXPECTED VERSUS ACTUAL BEHAVIOR :
      EXPECTED -
      Be able to resize the dialog without it freezing and then crashing the OS.
      ACTUAL -
      When holding down the mouse and then trying to resize it as small as possible all the while holding down the mouse, the system paused for a while and then suddenly and completely crashed. It was as if someone had hit the hardware reset button.

      REPRODUCIBILITY :
      This bug can be reproduced always.



      CUSTOMER SUBMITTED WORKAROUND :
      NONE, unless going back to version 1.6.0_07.
      ---------- BEGIN SOURCE ----------
      // File 1 (main file): TestFrame.java
      package com.quotetech.test;

      import java.awt.Dimension;

      import java.awt.event.ActionEvent;
      import java.awt.event.ActionListener;
      import java.awt.event.WindowAdapter;
      import java.awt.event.WindowEvent;

      import java.util.Currency;
      import java.util.Locale;
      import java.util.Vector;

      import javax.swing.ImageIcon;
      import javax.swing.JDialog;
      import javax.swing.JFrame;
      import javax.swing.JMenu;
      import javax.swing.JMenuBar;
      import javax.swing.JMenuItem;
      import javax.swing.JPanel;
      import javax.swing.SwingUtilities;
      import javax.swing.UIManager;

      public class TestFrame
      {
      public static void main(String[] args)
      {
      try
      {
      /*
      // install synthetica look and feel...
      de.javasoft.plaf.synthetica.SyntheticaStandardLookAndFeel
      syntheticaStandardLookAndFeel =
      new de.javasoft.plaf.synthetica.SyntheticaStandardLookAndFeel();

      UIManager.installLookAndFeel(new UIManager.LookAndFeelInfo(
      syntheticaStandardLookAndFeel.getName (),
      de.javasoft.plaf.synthetica.SyntheticaStandardLookAndFeel.class.
      getName ()));
      */
      UIManager.setLookAndFeel ("de.javasoft.plaf.synthetica.SyntheticaSimple2DLookAndFeel");
      }
      catch (Throwable pException)
      {
      System.err.println ("\nNote: this test which will consistently crash Windows " +
      "XP requires the Synthetica jar files: synthetica.jar and syntheticaSimple2D.jar.\n" +
      "The synthetica.jar file is available for download from: http://www.javasoft.de/jsf/secured/products/synthetica/download\n" +
      "and the syntheticaSimple2D.jar is available for download from: http://www.javasoft.de/jsf/public/products/synthetica/themes\n\n" +
      "If you are not registered you can do so for free.\n\n");

      pException.printStackTrace ();
      }

      final JFrame frame = new JFrame("Test Panel Resize Crash On Windows...");
      frame.setJMenuBar(new CustomMenuBar(frame));

      frame.addWindowListener(new WindowAdapter()
      {
      public void windowClosing(WindowEvent e)
      {
      System.exit(0);
      }
      });

      frame.setSize (new Dimension (281, 150));

      Dimension screenSize = frame.getToolkit ().getScreenSize ();

      frame.setLocation (((screenSize.width - frame.getSize ().
      width) / 2), ((screenSize.height - frame.getSize ().
      height) / 2));

      frame.setVisible(true);
      }


      protected static class CustomMenuBar extends JMenuBar implements ActionListener
      {
      private JMenuItem fOpenTestPanelMenuItem = null;

      private JMenuItem fExitMenuItem = null;

      private JFrame fParentFrame = null;

      private JMenu fFileMenu = null;

      public CustomMenuBar(JFrame pParentFrame)
      {
      fParentFrame = pParentFrame;

      //File menu...
      fFileMenu = new JMenu("File");
      fFileMenu.setMnemonic ('F');

      fOpenTestPanelMenuItem = new JMenuItem("Open Test Panel");
        fOpenTestPanelMenuItem.setMnemonic('o');
      fOpenTestPanelMenuItem.addActionListener(this);
      fFileMenu.add (fOpenTestPanelMenuItem);

      fFileMenu.addSeparator ();

      fExitMenuItem = new JMenuItem("Exit");
        fExitMenuItem.setMnemonic('x');
      fExitMenuItem.addActionListener(this);
      fFileMenu.add (fExitMenuItem);

      add (fFileMenu);
      }

      public void actionPerformed(ActionEvent pActionEvent)
      {
      if (pActionEvent.getSource().equals(fOpenTestPanelMenuItem))
      {
      TestPanelResizeCrash testPanelResizeCrash = new TestPanelResizeCrash ();

      JDialog dialog = testPanelResizeCrash.createDialog (fParentFrame,
      "Test Panel Resize Crash...", true);

      testPanelResizeCrash.openParentWindow ();
      }
      else if (pActionEvent.getSource().equals(fExitMenuItem))
      {
      System.exit (1);
      }
      }
      }
      }


      //File 2: TestPanelResizeCrash.java
      package com.quotetech.test;

      import java.awt.BorderLayout;
      import java.awt.Color;
      import java.awt.Dimension;
      import java.awt.FlowLayout;
      import java.awt.Font;
      import java.awt.Frame;
      import java.awt.GridBagConstraints;
      import java.awt.GridBagLayout;
      import java.awt.Insets;
      import java.awt.Window;

      import java.awt.event.ActionEvent;
      import java.awt.event.ActionListener;

      import java.util.Enumeration;
      import java.util.Hashtable;
      import java.util.Vector;

      import javax.swing.JCheckBox;
      import javax.swing.JComboBox;
      import javax.swing.JDialog;
      import javax.swing.JLabel;
      import javax.swing.JPanel;
      import javax.swing.JScrollPane;
      import javax.swing.JTextArea;
      import javax.swing.SwingUtilities;

      import javax.swing.border.EmptyBorder;
      import javax.swing.border.EtchedBorder;
      import javax.swing.border.TitledBorder;

      import javax.swing.event.CaretEvent;
      import javax.swing.event.CaretListener;

      public class TestPanelResizeCrash extends JPanel implements ActionListener,
        CaretListener
      {
      public static final int DASH_LINE_CODE = 4145;
      public static final int DOT_LINE_CODE = 4113;
      public static final int DOUBLE_3D_RAISED_CODE = 24579;
      public static final int DOUBLE_3D_LOWERED_CODE = 40963;
      public static final int ULTRA_THIN_LINE_CODE = 0x41000;
      public static final int THIN_THIN_LINE_CODE = 0x81000;
      public static final int THIN_LINE_CODE = 4097;
      public static final int MEDIUM_LINE_CODE = 4098;
      public static final int THICK_LINE_CODE = 4099;
      public static final int DOUBLE_LINE_CODE = 8195;
      public static final int RAISED_3D_CODE = 24578;
      public static final int LOWERED_3D_CODE = 40962;
      public static final int MEDIUM_DASH_CODE = 4193;
      public static final int LARGE_DASH_CODE = 4241;

      public final static String DASH_LINE = "Dashed Line";
      public final static String DOT_LINE = "Dotted Line";
      public final static String DOUBLE_3D_LOWERED = "Double 3D Lowered Line";
      public final static String DOUBLE_3D_RAISED = "Double 3D Raised Line";
      public final static String DOUBLE_LINE = "Double Line";
      public final static String LOWERED_3D = "Lowered 3D Line";
      public final static String MEDIUM_DASH = "Medium Dashed Line";
      public final static String MEDIUM_LINE = "Medium Line";
      public final static String RAISED_3D = "Raised 3D Line";
      public final static String THICK_LINE = "Thick Line";
      public final static String THIN_LINE = "Thin Line";
      public final static String THIN_THIN_LINE = "Very Thin Line";

      public TestPanelResizeCrash()
      {
      setTitle("Report Header");

      JPanel checkBoxesPanel = createCheckBoxesPanel ();

      addWorkComponents (DESCRIPTION, null, createMotherOfMainPanel (),
      checkBoxesPanel);

      setPreferredSize (new Dimension (600, 370));
      }

      public void actionPerformed(ActionEvent pEvent)
      {
      if (pEvent.getSource ().equals (fAddSeparatorLineCheckBox))
      {
      if (fAddSeparatorLineCheckBox.isSelected ())
      fSeparatorLineTypesComboBox.setEnabled (true);
      else
      fSeparatorLineTypesComboBox.setEnabled (false);
      }
      }

      public void caretUpdate (CaretEvent pCaretEvent)
      {
      if (fReportHeaderText.getText ().length () > 0)
      {
      setIncludeInReport (true);
      }
      else
      {
      setIncludeInReport (false);
      }
      }

      public JDialog createDialog (Frame pOwner, String pTitle, boolean pModal)
      {
      JDialog dialog = new JDialog(pOwner, pTitle, pModal);
      dialog.getContentPane().add(this);

      dialog.pack ();

      return dialog;
      }

      public void openParentWindow()
      {
      Window window = getParentWindow();
      if (window != null)
      {
      if (window instanceof Frame)
      {
      Frame frame = (Frame) window;
      if (frame.getState () == Frame.ICONIFIED)
      frame.setState (Frame.NORMAL);
      }

      if (window.isVisible ())
      {
      window.toFront ();
      }
      else
      {
      window.setVisible (true);
      }
      }
      }

      public Window getParentWindow()
      {
      return SwingUtilities.windowForComponent(this);
      }


      protected void addWorkComponents (String pDescription, JPanel pReportHeadingPanel,
      JPanel pMainWorkComponent, JPanel pCheckBoxesPanel)
      {
      JPanel mainPanel = new JPanel (new GridBagLayout ());

      GridBagConstraints gridBagConstraints = new GridBagConstraints ();

      // (top, left, bottom, right)
      gridBagConstraints.insets = new Insets (0, 5, 0, 5);
      gridBagConstraints.anchor = GridBagConstraints.CENTER;
      gridBagConstraints.gridx = 0;
      gridBagConstraints.gridy = GridBagConstraints.RELATIVE;
      gridBagConstraints.weightx = 1;
      gridBagConstraints.weighty = 1;
      gridBagConstraints.fill = GridBagConstraints.BOTH;

      gridBagConstraints.weighty = 0;
      gridBagConstraints.fill = GridBagConstraints.BOTH;

      if (pReportHeadingPanel != null)
      {
      gridBagConstraints.fill = GridBagConstraints.HORIZONTAL;
      gridBagConstraints.insets = new Insets (3, 5, 0, 5);

      mainPanel.add (pReportHeadingPanel, gridBagConstraints);
      }

      gridBagConstraints.insets = new Insets (5, 5, 0, 5);
      gridBagConstraints.weightx = 1;
      gridBagConstraints.weighty = 1;
      gridBagConstraints.fill = GridBagConstraints.BOTH;
      mainPanel.add (pMainWorkComponent, gridBagConstraints);

      gridBagConstraints.insets = new Insets (0, 2, 0, 2);
      gridBagConstraints.anchor = GridBagConstraints.SOUTHWEST;
      gridBagConstraints.weightx = 0;
      gridBagConstraints.weighty = 0;
      gridBagConstraints.fill = GridBagConstraints.NONE;

      if (pCheckBoxesPanel != null)
      {
      gridBagConstraints.insets = new Insets (5, 0, 0, 5);
      mainPanel.add (pCheckBoxesPanel, gridBagConstraints);
      }

      addMainPanel (mainPanel);
      }

      protected void addMainPanel (JPanel pMainPanel)
      {
      addMainPanel (pMainPanel, false);
      }

      protected void addMainPanel (JPanel pMainPanel, boolean pAlwaysAddScrollPane)
      {
      setLayout (new BorderLayout (0, 0));

      Dimension screenSize = getToolkit ().getScreenSize ();

      if (pAlwaysAddScrollPane || (screenSize.width < MINIMUM_WIDTH || screenSize.height <
      MINIMUM_HEIGHT))
      {
      fMainScrollPane = new JScrollPane (pMainPanel);
      add (fMainScrollPane);
      }
      else
      {
      add (pMainPanel);
      }
      }

      protected JPanel createCheckBoxesPanel ()
      {
      return createCheckBoxesPanel (true, false, false);
      }

      protected JPanel createCheckBoxesPanel (boolean pIncludeCheckBox)
      {
      return createCheckBoxesPanel (pIncludeCheckBox, false, false);
      }

      protected JPanel createCheckBoxesPanel (boolean pIncludeCheckBox,
      boolean pHardPageBreakBefore, boolean pHardPageBreakAfter)
      {
      fCheckBoxesPanel = new JPanel (new GridBagLayout ());

      GridBagConstraints gridBagConstraints = new GridBagConstraints ();
      gridBagConstraints.gridx = GridBagConstraints.RELATIVE;
      gridBagConstraints.weighty = 0;
      gridBagConstraints.weightx = 0;
      gridBagConstraints.fill = GridBagConstraints.NONE;
      gridBagConstraints.anchor = GridBagConstraints.SOUTHWEST;

      if (pIncludeCheckBox)
      {
      if (! pHardPageBreakBefore && ! pHardPageBreakAfter)
      gridBagConstraints.weightx = 1;

      fIncludeInReportCheckBox = new JCheckBox ("Include In Report");
      fIncludeInReportCheckBox.setSelected (true);

      fIncludeInReportCheckBox.setBorder (new EmptyBorder (0, 0, 0, 0));

      fCheckBoxesPanel.add (fIncludeInReportCheckBox, gridBagConstraints);
      }

      if (pHardPageBreakBefore)
      {
      if (! pHardPageBreakAfter)
      gridBagConstraints.weightx = 1;

      fHardPageBreakBeforeCheckBox = new JCheckBox ("Page Break Before");
      fHardPageBreakBeforeCheckBox.setBorder (new EmptyBorder (0, 0, 0, 0));

      fCheckBoxesPanel.add (fHardPageBreakBeforeCheckBox, gridBagConstraints);
      }

      if (pHardPageBreakAfter)
      {
      gridBagConstraints.weightx = 1;

      fHardPageBreakAfterCheckBox = new JCheckBox ("Page Break After");
      fHardPageBreakAfterCheckBox.setBorder (new EmptyBorder (0, 0, 0, 0));

      fCheckBoxesPanel.add (fHardPageBreakAfterCheckBox, gridBagConstraints);
      }

      return fCheckBoxesPanel;
      }


      // private methods...
      private JPanel createMotherOfMainPanel ()
      {
      GridBagConstraints gridBagConstraints = new GridBagConstraints ();

      // (top, left, bottom, right)
      gridBagConstraints.anchor = GridBagConstraints.WEST;
      gridBagConstraints.insets = new Insets (0, 0, 0, 0);
      gridBagConstraints.gridx = 0;
      gridBagConstraints.gridy = GridBagConstraints.RELATIVE;
      gridBagConstraints.weightx = 0;
      gridBagConstraints.weighty = 0;
      gridBagConstraints.fill = GridBagConstraints.NONE;

      JPanel mainPanel = new JPanel (new GridBagLayout ());

      fAlignmentTypesComboBox = new JComboBox (new String[] { LEFT_ALIGNMENT,
      CENTER_ALIGNMENT, RIGHT_ALIGNMENT });

      JPanel reportTextAlignmentPanel = new JPanel (new FlowLayout ());
      reportTextAlignmentPanel.setBorder (new EmptyBorder (0, 0, 0, 0));

      JLabel reportTextAlignmentLabel = new JLabel ("Report Header Alignment:");

      reportTextAlignmentPanel.add (reportTextAlignmentLabel);
      reportTextAlignmentPanel.add (fAlignmentTypesComboBox);

      mainPanel.add (reportTextAlignmentPanel, gridBagConstraints);

      mainPanel.add (createReportHeaderScrollPane (), gridBagConstraints);

      fAddSeparatorLineCheckBox = new JCheckBox ("Add Separator Line");
      fAddSeparatorLineCheckBox.setSelected (true);
      fAddSeparatorLineCheckBox.addActionListener (this);

      fSeparatorLineTypesComboBox = new JComboBox (getSeparatorLineTypes ());

      JPanel separatorLinePanel = new JPanel (new FlowLayout ());
      separatorLinePanel.setBorder (new EmptyBorder (0, 0, 0, 0));

      separatorLinePanel.add (fAddSeparatorLineCheckBox);
      separatorLinePanel.add (fSeparatorLineTypesComboBox);

      mainPanel.add (separatorLinePanel, gridBagConstraints);

      JPanel motherOfMainPanel = new JPanel (new GridBagLayout ());

      gridBagConstraints.anchor = GridBagConstraints.NORTHWEST;
      gridBagConstraints.gridy = 0;
      gridBagConstraints.weightx = 1;
      gridBagConstraints.weighty = 1;
      gridBagConstraints.fill = GridBagConstraints.NONE;

      motherOfMainPanel.add (new JScrollPane (mainPanel), gridBagConstraints);

      // motherOfMainPanel.add (mainPanel, gridBagConstraints);

      return motherOfMainPanel;
      }

      private JScrollPane createReportHeaderScrollPane ()
      {
      fReportHeaderText = new JTextArea();
      fReportHeaderText.addCaretListener (this);
      fReportHeaderText.setLineWrap(true);
      fReportHeaderText.setWrapStyleWord(true);
      fReportHeaderText.setTabSize (9);

      JScrollPane scrollPane = new JScrollPane(fReportHeaderText);
      scrollPane.setPreferredSize (new Dimension (500, 125));

      TitledBorder titledBorder = new TitledBorder(new EtchedBorder(),
      "Report Header Text");
      titledBorder.setTitleColor(java.awt.Color.black);
      titledBorder.setTitleFont(getFont());
      titledBorder.setTitleJustification (TitledBorder.LEFT);
      scrollPane.setBorder(titledBorder);

      return scrollPane;
      }

      public void setIncludeInReport (boolean pIncludeInReport)
      {
      if (fIncludeInReportCheckBox != null)
      {
      if (pIncludeInReport && ! fIncludeInReportCheckBox.isSelected ())
      {
      fIncludeInReportCheckBox.setSelected (true);
      }
      else if (! pIncludeInReport && fIncludeInReportCheckBox.isSelected ())
      {
      fIncludeInReportCheckBox.setSelected (false);
      }
      }
      }

      public void setTitle(String pTitle)
      {
      if (pTitle != null && pTitle.length() > 0)
      {
      TitledBorder border = new TitledBorder(new EtchedBorder(), pTitle);
      border.setTitleColor(java.awt.Color.black);
      border.setTitleJustification(TitledBorder.LEFT);
      border.setTitleFont(getFont());

      setBorder(border);

      setName(pTitle);
      }
      else
      {
      setBorder(new EtchedBorder());
      }

      fTitle = pTitle;
      }


      private static Hashtable fSeparatorLineTypesHashtable = new Hashtable ();
      static
      {
      fSeparatorLineTypesHashtable.put (DASH_LINE,
      new Integer (DASH_LINE_CODE));
      fSeparatorLineTypesHashtable.put (DOT_LINE,
      new Integer (DOT_LINE_CODE));
      fSeparatorLineTypesHashtable.put (DOUBLE_3D_LOWERED,
      new Integer (DOUBLE_3D_LOWERED_CODE));
      fSeparatorLineTypesHashtable.put (DOUBLE_3D_RAISED,
      new Integer (DOUBLE_3D_RAISED_CODE));
      fSeparatorLineTypesHashtable.put (DOUBLE_LINE,
      new Integer (DOUBLE_LINE_CODE));
      fSeparatorLineTypesHashtable.put (LOWERED_3D,
      new Integer (LOWERED_3D_CODE));
      fSeparatorLineTypesHashtable.put (MEDIUM_DASH,
      new Integer (MEDIUM_DASH_CODE));
      fSeparatorLineTypesHashtable.put (MEDIUM_LINE,
      new Integer (MEDIUM_LINE_CODE));
      fSeparatorLineTypesHashtable.put (RAISED_3D,
      new Integer (RAISED_3D_CODE));
      fSeparatorLineTypesHashtable.put (THICK_LINE,
      new Integer (THICK_LINE_CODE));
      fSeparatorLineTypesHashtable.put (THIN_LINE,
      new Integer (THIN_LINE_CODE));
      fSeparatorLineTypesHashtable.put (THIN_THIN_LINE,
      new Integer (THIN_THIN_LINE_CODE));
      }

      public static String[] getSeparatorLineTypes ()
      {
      Vector vector = new Vector ();

      Enumeration keys = fSeparatorLineTypesHashtable.keys ();
      while (keys.hasMoreElements

            tdv Dmitri Trembovetski (Inactive)
            igor Igor Nekrestyanov (Inactive)
            Votes:
            0 Vote for this issue
            Watchers:
            1 Start watching this issue

              Created:
              Updated:
              Imported:
              Indexed: